home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 1997 #3 / Amiga Plus CD - 1997 - No. 03.iso / pd / programmierung / alienbreed3d2_src / cheesesauce / andy.lha / Anims < prev    next >
Text File  |  1995-09-15  |  51KB  |  3,592 lines

  1. Flash:
  2.  
  3. ; D0=number of a zone, D1=brightness change
  4.  
  5.  cmp.w #-20,d1
  6.  bgt.s .okflash
  7.  move.w #-20,d1
  8. .okflash:
  9.  
  10.  movem.l d0/a0/a1,-(a7)
  11.  
  12.  move.l #CurrentPointBrights,a1
  13.  
  14.  move.l ZoneAdds,a0
  15.  move.l (a0,d0.w*4),a0
  16.  add.l LEVELDATA,a0
  17.  
  18.  move.l a0,-(a7)
  19.  
  20.  add.w ToZonePts(a0),a0
  21. flashpts:
  22.  move.w (a0)+,d2
  23.  blt.s flashedall
  24.  add.w d1,(a1,d2.w*4)
  25.  add.w d1,2(a1,d2.w*4)
  26.  bra flashpts
  27.  
  28. flashedall:
  29.  
  30.  move.l (a7)+,a0
  31.  
  32.  move.l #ZoneBrightTable,a1
  33.  add.w d1,(a1,d0.w*4)
  34.  add.w d1,2(a1,d0.w*4)
  35.  
  36.  add.l #ToListOfGraph,a0
  37.  
  38. doemall:
  39.  move.w (a0),d0
  40.  blt.s doneemall
  41.  add.w d1,(a1,d0.w*4)
  42.  add.w d1,2(a1,d0.w*4)
  43.  addq #8,a0
  44.  bra.s doemall
  45.  
  46. doneemall:
  47.  movem.l (a7)+,d0/a0/a1
  48.  
  49.  rts
  50.  
  51. prot2: dc.w 0
  52.  
  53. radius: dc.w 0
  54.  
  55. ExplodeIntoBits:
  56.  
  57.  move.w d3,radius
  58.  
  59.  cmp.w #7,d2
  60.  ble.s .oksplut
  61.  move.w #7,d2
  62. .oksplut:
  63.  
  64.  move.l NastyShotData,a5
  65.  move.w #19,d1
  66. .findeight
  67.  move.w 12(a5),d0
  68.  blt.s .gotonehere
  69.  adda.w #64,a5
  70.  dbra d1,.findeight
  71.  rts
  72.  
  73. .gotonehere
  74.  
  75.  move.b #0,damagetaken(a5)
  76.  move.b #0,numlives(a5)
  77.  
  78.  move.l ObjectPoints,a2
  79.  move.w (a5),d3
  80.  lea (a2,d3.w*8),a2
  81. ; jsr GetRand
  82. ; lsr.w #4,d0
  83. ; move.w radius,d1
  84. ; and.w d1,d0
  85. ; asr.w #1,d1
  86. ; sub.w d1,d0
  87.  move.w newx,d0
  88.  move.w d0,(a2)
  89. ; jsr GetRand
  90. ; lsr.w #4,d0
  91. ; move.w radius,d1
  92. ; and.w d1,d0
  93. ; asr.w #1,d1
  94. ; sub.w d1,d0
  95.  move.w newz,d0
  96.  move.w d0,4(a2)
  97.  
  98.  jsr GetRand
  99.  and.w #8190,d0
  100.  move.l #SineTable,a2
  101.  adda.w d0,a2
  102.  move.w (a2),d3
  103.  move.w 2048(a2),d4
  104.  Jsr GetRand
  105.  and.w #3,d0
  106.  add.w #1,d0
  107.  ext.l d3
  108.  ext.l d4
  109.  asl.l d0,d3
  110.  asl.l d0,d4
  111.  move.l ImpactX(a0),d0
  112.  swap d4
  113.  asr.w #1,d0
  114.  add.w d0,d4
  115.  swap d0
  116.  move.w d4,shotzvel(a5)
  117.  swap d3
  118.  asr.w #1,d0
  119.  add.w d0,d3
  120.  move.w d3,shotxvel(a5)
  121.  jsr GetRand
  122.  and.w #1023,d0
  123.  add.w #2*128,d0
  124.  neg.w d0
  125.  move.w d0,shotyvel(a5)
  126.  move.l #0,EnemyFlags(a5)
  127.  move.w 12(a0),12(a5)
  128.  
  129. ; jsr GetRand
  130. ; lsr.w #4,d0
  131. ; move.w radius,d1
  132. ; and.w d1,d0
  133. ; asr.w #1,d1
  134. ; sub.w d1,d0
  135.  move.w 4(a0),d0
  136.  add.w #6,d0
  137.  ext.l d0
  138.  asl.l #7,d0
  139.  
  140.  move.l d0,accypos(a5)
  141.  move.w d2,d0
  142.  and.w #3,d0
  143.  add.w #50,d0
  144.  move.b d0,shotsize(a5)
  145.  move.w #40,shotgrav(a5)
  146.  move.w #0,shotflags(a5)
  147.  move.w #-1,shotlife(a5)
  148.  move.b #2,16(a5)
  149.  clr.b shotstatus(a5)
  150.  move.b ObjInTop(a0),ObjInTop(a5)
  151.  st worry(a0)
  152.  adda.w #64,a5
  153.  sub.w #1,d2
  154.  blt.s .gotemall
  155.  dbra d1,.findeight
  156.  
  157. .gotemall
  158.  
  159.  rts
  160.  
  161. brightanim:
  162.  
  163.  move.l #BrightAnimTable,a1
  164.  move.l #BrightAnimPtrs,a3
  165.  move.l #BrightAnimStarts,a4
  166. dobrightanims
  167.  move.l (a3),d0
  168.  blt nomoreanims
  169.  move.l d0,a2
  170.  move.w (a2)+,d0
  171.  cmp.w #999,d0
  172.  bne.s itsabright
  173.  move.l (a4),a2
  174.  move.w (a2)+,d0
  175. itsabright:
  176.  move.l a2,(a3)+
  177.  addq #4,a4
  178.  move.w d0,(a1)+
  179.  bra.s dobrightanims
  180.  
  181. nomoreanims:
  182.  rts
  183.  
  184. BrightAnimTable: ds.w 20
  185. BrightAnimPtrs:
  186.  dc.l PulseANIM
  187.  dc.l FlickerANIM
  188.  dc.l FireFlickerANIM
  189.  dc.l -1
  190.  
  191. BrightAnimStarts:
  192.  dc.l PulseANIM
  193.  dc.l FlickerANIM
  194.  dc.l FireFlickerANIM
  195.  
  196. PulseANIM:
  197.  dc.w -10,-10,-9,-9,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9,10
  198.  dc.w 10,9,8,7,6,5,4,3,2,1,0,-1,-2,-3,-4,-5,-6,-7,-8,-9
  199.  dc.w 999
  200.  
  201. FlickerANIM:
  202.  dcb.w 20,10
  203.  dc.w -10
  204.  dcb.w 30,10
  205.  dc.w -10
  206.  dcb.w 5,10
  207.  dc.w -10
  208.  dc.w 999
  209.  
  210. FireFlickerANIM:
  211.  dc.w -10,-9,-6,-10,-6,-5,-5,-7,-5,-10,-9,-8,-7,-5,-5,-5,-5
  212.  dc.w -5,-5,-5,-5,-6,-7,-8,-9,-5,-10,-9,-10,-6,-5,-5,-5,-5,-5
  213.  dc.w -5,-5
  214.  dc.w 999
  215.  
  216. realtab:
  217.  dc.l prot1-78935450
  218.  dc.l prot2-78935450
  219.  dc.l prot3-78935450
  220.  dc.l prot4-78935450
  221.  dc.l prot5-78935450
  222.  dc.l prot6-78935450
  223.  dc.l prot7-78935450
  224.  dc.l prot8-78935450
  225.  dc.l prot9-78935450
  226.  dc.l protA-78935450
  227.  
  228. objvels: ds.l 8
  229.  
  230. FramesToDraw: dc.w 0
  231. TempFrames: dc.w 0
  232.  
  233. objmoveanim:
  234.  
  235.  move.l PLR1_Roompt,a0
  236.  move.w (a0),PLR1_Zone
  237.  move.l PLR2_Roompt,a0
  238.  move.w (a0),PLR2_Zone
  239.  
  240.  bsr Player1Shot
  241.  bsr Player2Shot
  242.  bsr SwitchRoutine
  243.  bsr DoorRoutine
  244.  bsr LiftRoutine
  245.  bsr ObjectHandler
  246.  bsr brightanim
  247.  
  248.  subq.w #1,animtimer
  249.  bgt.s notzero
  250.  move.w #2,animtimer
  251.  move.l otherrip,d0
  252.  move.l RipTear,otherrip
  253.  move.l d0,RipTear
  254. notzero:
  255.  
  256.  rts
  257.  
  258. ******************************
  259.  
  260. tstdir: dc.w 0
  261.  
  262. liftheighttab: ds.w 40
  263. doorheighttab: ds.w 40
  264. PLR1_stoodonlift: dc.b 0
  265. PLR2_stoodonlift: dc.b 0
  266. liftattop: dc.b 0
  267. liftatbot: dc.b 0
  268. ZoneBrightTable:
  269.  ds.l 300
  270.  
  271. DoWaterAnims:
  272.  
  273.  move.w #20,d0
  274. wateranimlop:
  275.  move.l (a0)+,d1
  276.  move.l (a0)+,d2
  277.  move.l (a0),d3
  278.  move.w 4(a0),d4
  279.  move.w d4,d5
  280.  muls TempFrames,d5
  281.  add.l d5,d3
  282.  cmp.l d1,d3
  283.  bgt.s waternotattop
  284.  
  285.  move.l d1,d3
  286.  move.w #128,d4
  287.  bra waterdone
  288.  
  289. waternotattop:
  290.  
  291.  cmp.l d2,d3
  292.  blt.s waterdone
  293.  
  294.  move.l d2,d3
  295.  move.w #-128,d4
  296.  
  297. waterdone:
  298.  
  299.  move.l d3,(a0)+
  300.  move.w d4,(a0)+
  301.  move.l d3,d1
  302. morezones:
  303.  move.w (a0)+,d2
  304.  bge.s okzone
  305.  
  306.  
  307.  dbra d0,wateranimlop
  308.  rts
  309.  
  310. okzone:
  311.  
  312.  move.l (a0)+,a1
  313.  add.l LEVELGRAPHICS,a1
  314.  move.l d1,d3
  315.  asr.l #6,d3
  316.  move.w d3,2(a1)
  317.  move.l ZoneAdds,a1
  318.  move.l (a1,d2.w*4),a1
  319.  add.l LEVELDATA,a1
  320.  move.l d1,ToZoneWater(a1)
  321.  
  322.  bra.s morezones
  323.  
  324.  rts
  325.  
  326.  even
  327. LiftRoutine:
  328.  
  329.  move.l LiftData,a0
  330.  move.l #liftheighttab,a6
  331.  
  332. doalift:
  333.  
  334.  move.w (a0)+,d0    ; bottom of lift movement
  335.  cmp.w #999,d0
  336.  bne notallliftsdone
  337.  move.w #999,(a6)
  338.  
  339.  bsr DoWaterAnims
  340.  
  341.  rts
  342.  
  343. notallliftsdone:
  344.  move.w (a0)+,d1    ; top of lift movement.
  345.  
  346.  move.w (a0),d3
  347.  move.w d3,(a6)+
  348.  move.w 2(a0),d2
  349.  move.w d2,d7
  350.  muls TempFrames,d2
  351.  add.w d2,d3
  352.  move.w 2(a0),d2
  353.  cmp.w d3,d0
  354.  sle.s liftatbot
  355.  bgt.s .nolower
  356.  moveq #0,d2
  357.  move.w d0,d3
  358. .nolower:
  359.  
  360.  cmp.w d3,d1
  361.  sge.s liftattop
  362.  blt.s .noraise
  363.  moveq #0,d2
  364.  move.w d1,d3
  365. .noraise:
  366.  
  367.  sub.w d3,d0
  368.  cmp.w #15*16,d0
  369.  slt d6
  370.  
  371.  move.w d3,(a0)+
  372.  move.l a0,a5
  373.  move.w d2,(a0)+
  374.  move.w d2,d7
  375.  
  376.  move.l (a0)+,a1
  377.  add.l LEVELGRAPHICS,a1
  378.  asr.w #2,d3
  379.  move.w d3,d0
  380.  asl.w #2,d0
  381.  move.w d0,2(a1)
  382.  move.w d3,d0
  383.  muls #256,d3
  384.  move.w (a0)+,d5
  385.  move.l ZoneAdds,a1
  386.  move.l (a1,d5.w*4),a1
  387.  add.l LEVELDATA,a1
  388.  move.w (a1),d5
  389.  move.l PLR1_Roompt,a3
  390.  move.l d3,2(a1)
  391.  neg.w d0
  392.  
  393.  cmp.w (a3),d5
  394.  seq.s PLR1_stoodonlift
  395.  move.l PLR2_Roompt,a3
  396.  cmp.w (a3),d5
  397.  seq.s PLR2_stoodonlift
  398.  
  399.  move.w (a0)+,d2    ; conditions
  400.  and.w Conditions,d2
  401.  cmp.w -2(a0),d2
  402.  beq.s .satisfied 
  403.  
  404.  move.w (a0)+,d5
  405.  
  406. .dothesimplething:
  407.  move.l FloorLines,a3
  408. .simplecheck:
  409.  move.w (a0)+,d5
  410.  blt nomoreliftwalls
  411.  asl.w #4,d5
  412.  lea (a3,d5.w),a4
  413.  move.w #0,14(a4)
  414.  move.l (a0)+,a1
  415.  add.l LEVELGRAPHICS,a1
  416.  move.l (a0)+,a2
  417.  adda.w d0,a2
  418.  move.l a2,10(a1)
  419.  move.l d3,20(a1)
  420.  bra.s .simplecheck
  421.  bra nomoreliftwalls 
  422.  
  423. .satisfied:
  424.  
  425.  move.l FloorLines,a3
  426.  moveq #0,d4
  427.  moveq #0,d5
  428.  move.b (a0)+,d4
  429.  move.b (a0)+,d5
  430.  tst.b liftattop
  431.  bne tstliftlower
  432.  tst.b liftatbot
  433.  bne tstliftraise
  434.  move.w #0,d1
  435.  
  436. backfromlift
  437.  
  438.  and.w #255,d0
  439.  
  440. liftwalls:
  441.  move.w (a0)+,d5
  442.  blt nomoreliftwalls
  443.  
  444.  asl.w #4,d5
  445.  lea (a3,d5.w),a4
  446.  move.w 14(a4),d4
  447.  move.w #$8000,14(a4)
  448.  and.w d1,d4
  449.  beq.s .nothinghit
  450.  move.w d7,(a5)
  451.  move.w #0,Noisex
  452.  move.w #0,Noisez
  453.  move.w #50,Noisevol
  454.  move.w #5,Samplenum
  455.  move.b #1,chanpick
  456.  st notifplaying
  457.  move.b #$fe,IDNUM
  458.  movem.l a0/a3/a4/d0/d1/d2/d3/d6/d7,-(a7)
  459.  jsr MakeSomeNoise
  460.  movem.l (a7)+,a0/a3/a4/d0/d1/d2/d3/d6/d7
  461. .nothinghit:
  462.  move.l (a0)+,a1
  463.  add.l LEVELGRAPHICS,a1
  464.  move.l (a0)+,a2
  465.  adda.w d0,a2
  466.  move.l a2,10(a1)
  467.  move.l d3,20(a1)
  468.  bra liftwalls
  469.  
  470. nomoreliftwalls 
  471.  bra doalift
  472.  
  473.  rts
  474.  
  475. tstliftlower:
  476.  cmp.b #1,d5
  477.  blt.s lift0
  478.  beq.s lift1
  479.  cmp.b #3,d5
  480.  blt.s lift2
  481.  beq.s lift3
  482.  
  483. lift0:
  484.  
  485.  moveq #0,d1
  486.  tst.b p1_spctap
  487.  beq.s .noplr1
  488.  move.w #%100000000,d1
  489.  move.w #4,d7
  490.  tst.b PLR1_stoodonlift
  491.  beq.s .noplr1
  492.  move.w #$8000,d1
  493.  bra backfromlift
  494.  
  495. .noplr1:
  496.  tst.b p2_spctap
  497.  beq.s .noplr2
  498.  or.w #%100000000000,d1
  499.  move.w #4,d7
  500.  tst.b PLR2_stoodonlift
  501.  beq.s .noplr2
  502.  move.w #$8000,d1
  503.  bra backfromlift
  504.  
  505. .noplr2:
  506.  bra backfromlift
  507.  
  508. lift1:
  509.  move.w #4,d7
  510.  tst.b PLR1_stoodonlift
  511.  bne.s lift1b
  512.  tst.b PLR2_stoodonlift
  513.  bne.s lift1b
  514.  move.w #%100100000000,d1
  515.  bra backfromlift
  516. lift1b:
  517.  move.w #$8000,d1
  518.  bra backfromlift
  519.  
  520. lift2:
  521.  move.w #$8000,d1
  522.  move.w #4,d7
  523.  bra backfromlift
  524.  
  525. lift3:
  526.  move.w #$0,d1
  527.  bra backfromlift
  528.  
  529. tstliftraise:
  530.  cmp.b #1,d4
  531.  blt.s rlift0
  532.  beq.s rlift1
  533.  cmp.b #3,d4
  534.  blt.s rlift2
  535.  beq.s rlift3
  536.  
  537. rlift0:
  538.  
  539.  moveq #0,d1
  540.  tst.b p1_spctap
  541.  beq.s .noplr1
  542.  move.w #%100000000,d1
  543.  move.w #-4,d7
  544.  tst.b PLR1_stoodonlift
  545.  beq.s .noplr1
  546.  move.w #$8000,d1
  547.  bra backfromlift
  548.  
  549. .noplr1:
  550.  tst.b p2_spctap
  551.  beq.s .noplr2
  552.  or.w #%100000000000,d1
  553.  move.w #-4,d7
  554.  tst.b PLR2_stoodonlift
  555.  beq.s .noplr2
  556.  move.w #$8000,d1
  557.  bra backfromlift
  558.  
  559. .noplr2:
  560.  
  561.  bra backfromlift
  562.  
  563. rlift1:
  564.  move.w #-4,d7
  565.  tst.b PLR1_stoodonlift
  566.  bne.s rlift1b
  567.  tst.b PLR2_stoodonlift
  568.  bne.s rlift1b
  569.  move.w #%100100000000,d1
  570.  bra backfromlift
  571. rlift1b:
  572.  move.w #$8000,d1
  573.  bra backfromlift
  574.  
  575. rlift2:
  576.  move.w #$8000,d1
  577.  move.w #-4,d7
  578.  bra backfromlift
  579.  
  580. rlift3:
  581.  move.w #$0,d1
  582.  bra backfromlift
  583.  
  584.  
  585. animtimer: dc.w 2
  586.  
  587.  
  588. doordir: dc.w -1
  589. doorpos: dc.w -9
  590. dooropen: dc.b 0
  591. doorclosed: dc.b 0 
  592.  
  593.  even 
  594. DoorRoutine:
  595.  
  596.  move.l #doorheighttab,a6
  597.  move.l DoorData,a0
  598.  
  599. doadoor:
  600.  
  601.  move.w (a0)+,d0    ; bottom of door movement
  602.  cmp.w #999,d0
  603.  bne notalldoorsdone
  604.  move.w #999,(a6)+
  605.  rts
  606. notalldoorsdone:
  607.  move.w (a0)+,d1    ; top of door movement.
  608.  
  609.  move.w (a0),d3
  610.  move.w d3,(a6)+
  611.  move.w 2(a0),d2
  612.  muls TempFrames,d2
  613.  add.w d2,d3
  614.  move.w 2(a0),d2
  615.  cmp.w d3,d0
  616.  sle.s doorclosed
  617.  bgt.s nolower
  618.  moveq #0,d2
  619. nolower:
  620.  
  621.  cmp.w d3,d1
  622.  sge.s dooropen
  623.  blt.s noraise
  624.  moveq #0,d2
  625.  move.w d1,d3
  626. noraise:
  627.  
  628.  sub.w d3,d0
  629.  cmp.w #15*16,d0
  630.  sge d6
  631.  
  632.  move.w d3,(a0)+
  633.  move.l a0,a5
  634.  move.w d2,(a0)+
  635.  move.w d2,d7
  636.  
  637.  move.l (a0)+,a1
  638.  add.l LEVELGRAPHICS,a1
  639.  asr.w #2,d3
  640.  move.w d3,d0
  641.  asl.w #2,d0
  642.  move.w d0,2(a1)
  643.  move.w d3,d0
  644.  muls #256,d3
  645.  move.l ZoneAdds,a1
  646.  move.w (a0)+,d5
  647.  
  648.  
  649.  move.l (a1,d5.w*4),a1
  650.  add.l LEVELDATA,a1
  651.  move.l d3,6(a1)
  652.  neg.w d0
  653.  and.w #255,d0
  654. ; add.w #64,d0
  655.  
  656.  cmp.w PLR1_Zone,d5
  657.  bne.s NotGoBackUp
  658.  tst.b dooropen
  659.  bne.s NotGoBackUp
  660.  tst.w d2
  661.  blt.s NotGoBackUp
  662.  move.w #-16,d7
  663.  move.w #$8000,d1
  664.  move.w (a0)+,d2
  665.  move.w (a0)+,d5
  666.  bra backfromtst
  667. NotGoBackUp:
  668.  
  669.  move.w (a0)+,d2    ; conditions
  670.  and.w Conditions,d2
  671.  
  672.  cmp.w -2(a0),d2
  673.  beq.s satisfied 
  674.  
  675.  move.w (a0)+,d5
  676.  
  677. dothesimplething:
  678.  move.l FloorLines,a3
  679. simplecheck:
  680.  move.w (a0)+,d5
  681.  blt nomoredoorwalls
  682.  asl.w #4,d5
  683.  lea (a3,d5.w),a4
  684.  move.w #0,14(a4)
  685.  move.l (a0)+,a1
  686.  add.l LEVELGRAPHICS,a1
  687.  move.l (a0)+,a2
  688.  adda.w d0,a2
  689.  move.l a2,10(a1)
  690.  move.l d3,24(a1)
  691.  bra.s simplecheck
  692.  bra nomoredoorwalls 
  693.  
  694.  
  695. satisfied:
  696.  
  697.  moveq #0,d4
  698.  moveq #0,d5
  699.  move.b (a0)+,d5
  700.  move.b (a0)+,d4
  701.  tst.b dooropen
  702.  bne tstdoortoclose
  703.  tst.b doorclosed
  704.  bne tstdoortoopen
  705.  move.w #$0,d1
  706.  
  707. backfromtst:
  708.  
  709.  move.l FloorLines,a3
  710.  
  711. doorwalls:
  712.  move.w (a0)+,d5
  713.  blt.s nomoredoorwalls
  714.  asl.w #4,d5
  715.  lea (a3,d5.w),a4
  716.  move.w 14(a4),d4
  717.  move.w #$8000,14(a4)
  718.  and.w d1,d4
  719.  beq.s nothinghit
  720.  move.w d7,(a5)
  721.  move.w #0,Noisex
  722.  move.w #0,Noisez
  723.  move.w #50,Noisevol
  724.  move.w #5,Samplenum
  725.  move.b #1,chanpick
  726.  clr.b notifplaying
  727.  move.b #$fd,IDNUM
  728.  movem.l a0/a3/d0/d1/d2/d3/d6,-(a7)
  729.  jsr MakeSomeNoise
  730.  movem.l (a7)+,a0/a3/d0/d1/d2/d3/d6
  731. nothinghit:
  732.  move.l (a0)+,a1
  733.  add.l LEVELGRAPHICS,a1
  734.  move.l (a0)+,a2
  735.  adda.w d0,a2
  736.  move.l a2,10(a1)
  737.  move.l d3,24(a1)
  738.  bra.s doorwalls
  739.  
  740. nomoredoorwalls 
  741.  bra doadoor
  742.  
  743.  rts
  744.  
  745. tstdoortoopen:
  746.  cmp.w #1,d5
  747.  blt.s door0
  748.  beq.s door1
  749.  cmp.w #3,d5
  750.  blt.s door2
  751.  beq.s door3
  752.  cmp.w #5,d5
  753.  blt.s door4
  754.  beq.s door5
  755.  
  756. door0:
  757.  
  758.  move.w #$0,d1
  759.  tst.b p1_spctap
  760.  beq.s .noplr1
  761.  move.w #%100000000,d1
  762. .noplr1:
  763.  tst.b p2_spctap
  764.  beq.s .noplr2
  765.  or.w #%100000000000,d1
  766. .noplr2:
  767.  move.w #-16,d7
  768.  bra backfromtst
  769.  
  770. door1:
  771.  move.w #%100100000000,d1
  772.  move.w #-16,d7
  773.  bra backfromtst
  774.  
  775. door2:
  776.  move.w #%10000000000,d1
  777.  move.w #-16,d7
  778.  bra backfromtst
  779.  
  780. door3:
  781.  move.w #%1000000000,d1
  782.  move.w #-16,d7
  783.  bra backfromtst
  784.  
  785. door4:
  786.  move.w #$8000,d1
  787.  move.w #-16,d7
  788.  bra backfromtst
  789.  
  790. door5:
  791.  move.w #$0,d1
  792.  bra backfromtst
  793.  
  794. tstdoortoclose:
  795.  tst.w d4
  796.  beq.s dclose0
  797.  bra.s dclose1
  798.  
  799. dclose0:
  800.  move.w #4,d7
  801.  move.w #$8000,d1
  802.  bra backfromtst
  803.  
  804. dclose1:
  805.  move.w #$0,d1
  806.  bra backfromtst
  807.  
  808. SwitchRoutine:
  809.  
  810.  move.l SwitchData,a0
  811.  move.w #7,d0
  812.  move.l Points,a1
  813. CheckSwitches
  814.  
  815.  tst.b p1_spctap
  816.  bne p1_SpaceIsPressed
  817. backtop2
  818.  tst.b p2_spctap
  819.  bne p2_SpaceIsPressed
  820. backtoend
  821.  
  822.  tst.b 2(a0)
  823.  beq nobutt
  824.  
  825.  tst.b 10(a0)
  826.  beq nobutt
  827.  
  828.  move.w TempFrames,d1
  829.  add.w d1,d1
  830.  add.w d1,d1
  831.  sub.b d1,3(a0)
  832.  bne nobutt
  833.  
  834.  move.b #0,10(a0)
  835.  move.l 6(a0),a3
  836.  add.l LEVELGRAPHICS,a3
  837.  move.w #11,4(a3)
  838.  move.w (a3),d3
  839.  and.w #%00000111100,d3
  840.  move.w d3,(a3)
  841.  move.w #7,d3
  842.  sub.w d0,d3
  843.  addq #4,d3
  844.  move.w Conditions,d4
  845.  bclr d3,d4
  846.  move.w d4,Conditions
  847.  move.w #0,Noisex
  848.  move.w #0,Noisez
  849.  move.w #50,Noisevol
  850.  move.w #10,Samplenum
  851.  move.b #1,chanpick
  852.  st notifplaying
  853.  move.b #$fc,IDNUM
  854.  movem.l a0/a3/d0/d1/d2/d3/d6,-(a7)
  855.  jsr MakeSomeNoise
  856.  movem.l (a7)+,a0/a3/d0/d1/d2/d3/d6
  857.  
  858. nobutt:
  859.  
  860.  adda.w #14,a0
  861.  dbra d0,CheckSwitches
  862.  rts
  863.  
  864. p1_SpaceIsPressed:
  865.  move.w p1_xoff,d1
  866.  move.w p1_zoff,d2
  867.  move.w (a0),d3
  868.  blt .NotCloseEnough
  869.  move.w 4(a0),d3
  870.  lea (a1,d3.w*4),a2
  871.  move.w (a2),d3
  872.  add.w 4(a2),d3
  873.  asr.w #1,d3
  874.  move.w 2(a2),d4
  875.  add.w 6(a2),d4
  876.  asr.w #1,d4
  877.  sub.w d1,d3
  878.  muls d3,d3
  879.  sub.w d2,d4
  880.  muls d4,d4
  881.  add.l d3,d4
  882.  cmp.l #60*60,d4
  883.  bge .NotCloseEnough
  884.  move.l 6(a0),a3
  885.  add.l LEVELGRAPHICS,a3
  886.  move.w #11,4(a3)
  887.  move.w (a3),d3
  888.  and.w #%00000111100,d3
  889.  not.b 10(a0)
  890.  beq.s .switchoff
  891.  or.w #2,d3
  892. .switchoff: 
  893.  move.w d3,(a3)
  894.  move.w #7,d3
  895.  sub.w d0,d3
  896.  addq #4,d3
  897.  move.w Conditions,d4
  898.  bchg d3,d4
  899.  move.w d4,Conditions
  900.  move.b #0,3(a0)
  901.  move.w #0,Noisex
  902.  move.w #0,Noisez
  903.  move.w #50,Noisevol
  904.  move.w #10,Samplenum
  905.  move.b #1,chanpick
  906.  st notifplaying
  907.  move.b #$fc,IDNUM
  908.  movem.l a0/a3/d0/d1/d2/d3/d6,-(a7)
  909.  jsr MakeSomeNoise
  910.  movem.l (a7)+,a0/a3/d0/d1/d2/d3/d6
  911.  
  912. .NotCloseEnough:
  913.  bra backtop2
  914.  
  915. p2_SpaceIsPressed:
  916.  move.w p2_xoff,d1
  917.  move.w p2_zoff,d2
  918.  move.w (a0),d3
  919.  blt .NotCloseEnough
  920.  move.w 4(a0),d3
  921.  lea (a1,d3.w*4),a2
  922.  move.w (a2),d3
  923.  add.w 4(a2),d3
  924.  asr.w #1,d3
  925.  move.w 2(a2),d4
  926.  add.w 6(a2),d4
  927.  asr.w #1,d4
  928.  sub.w d1,d3
  929.  muls d3,d3
  930.  sub.w d2,d4
  931.  muls d4,d4
  932.  add.l d3,d4
  933.  cmp.l #60*60,d4
  934.  bge .NotCloseEnough
  935.  move.l 6(a0),a3
  936.  add.l LEVELGRAPHICS,a3
  937.  move.w #11,4(a3)
  938.  move.w (a3),d3
  939.  and.w #%00000111100,d3
  940.  not.b 10(a0)
  941.  beq.s .switchoff
  942.  or.w #2,d3
  943. .switchoff: 
  944.  move.w d3,(a3)
  945.  move.w #7,d3
  946.  sub.w d0,d3
  947.  addq #4,d3
  948.  move.w Conditions,d4
  949.  bchg d3,d4
  950.  move.w d4,Conditions
  951.  movem.l a0/a1/d0,-(a7)
  952.  move.w #0,Noisex
  953.  move.w #0,Noisez
  954.  move.w #50,Noisevol
  955.  move.w #10,Samplenum
  956.  move.b #1,chanpick
  957.  st notifplaying
  958.  move.b #$fc,IDNUM
  959.  movem.l a0/a3/d0/d1/d2/d3/d6,-(a7)
  960.  jsr MakeSomeNoise
  961.  movem.l (a7)+,a0/a3/d0/d1/d2/d3/d6
  962.  
  963.  movem.l (a7)+,a0/a1/d0
  964.  
  965. .NotCloseEnough:
  966.  bra backtoend
  967.  
  968. prot1: dc.w 0
  969.   
  970. tempGotBigGun: dc.w 0 
  971. tempGunDamage: dc.w 0
  972. tempGunNoise: dc.w 1
  973. tempxoff: dc.w 0
  974. tempzoff: dc.w 0
  975. tempRoompt: dc.l 0
  976.  
  977. PLR1_GotBigGun: dc.w 0
  978. PLR1_GunDamage: dc.w 0
  979. PLR1_GunNoise: dc.w 0
  980. PLR2_GotBigGun: dc.w 0
  981. PLR2_GunDamage: dc.w 0
  982. PLR2_GunNoise: dc.w 0
  983. bulyspd: dc.w 0 
  984. closedist: dc.w 0
  985.  
  986. PLR1_ObsInLine:
  987.  ds.b 400 
  988. PLR2_ObsInLine:
  989.  ds.b 400 
  990.  
  991. rotcount:
  992.  dc.w 0
  993.  
  994. shotvels: ds.l 20
  995.  
  996.  include "PLAYERSHOOT.s"
  997.  
  998. PLR1_GunFrame: dc.w 0
  999. PLR2_GunFrame: dc.w 0
  1000.  
  1001. duh: dc.w 0
  1002. double: dc.w 0
  1003. ivescreamed: dc.w 0
  1004.  
  1005. ObjectHandler:
  1006.  
  1007.  move.l ObjectData,a0
  1008. Objectloop:
  1009.  tst.w (a0)
  1010.  blt doneallobj
  1011.  move.w 12(a0),GraphicRoom(a0)
  1012.  tst.b worry(a0)
  1013.  beq dontworryyourprettyhead
  1014.  
  1015.  move.b 16(a0),d0
  1016.  blt.s doneobj
  1017.  beq JUMPNASTY
  1018.  cmp.b #2,d0
  1019.  blt JUMPMEDI
  1020.  beq JUMPBULLET
  1021.  cmp.b #4,d0
  1022.  blt JUMPGUN
  1023.  beq JUMPKEY
  1024.  cmp.b #6,d0
  1025.  blt doneobj
  1026.  beq JUMPROBOT
  1027.  cmp.b #8,d0
  1028.  blt doneobj
  1029.  beq JUMPFLYINGNASTY
  1030.  cmp.b #10,d0
  1031.  blt JUMPAMMO
  1032.  beq JUMPBARREL
  1033.  cmp.b #12,d0
  1034.  blt doneobj
  1035.  beq JUMPMARINE
  1036.  cmp.b #14,d0
  1037.  blt JUMPWORM
  1038.  beq JUMPWELLHARD
  1039.  cmp.b #16,d0
  1040.  beq JUMPTREE
  1041.  cmp.b #18,d0
  1042.  blt JUMPEYEBALL
  1043.  beq JUMPTOUGHMARINE
  1044.  cmp.b #20,d0
  1045.  blt JUMPFLAMEMARINE
  1046.  beq JUMPGASPIPE
  1047.  
  1048. doneobj:
  1049.  
  1050. dontworryyourprettyhead:
  1051.  adda.w #64,a0
  1052.  bra Objectloop
  1053.  
  1054. doneallobj:
  1055.  rts
  1056.  
  1057. JUMPNASTY: 
  1058.  jsr ItsANasty
  1059.  bra doneobj
  1060. JUMPMEDI:
  1061.  jsr ItsAMediKit
  1062.  bra doneobj
  1063. JUMPBULLET
  1064.  jsr ItsABullet
  1065.  bra doneobj
  1066. JUMPGUN
  1067.  jsr ItsABigGun
  1068.  bra doneobj
  1069. JUMPKEY
  1070.  jsr ItsAKey
  1071.  bra doneobj
  1072.  
  1073. ; FIVE IS PLAYER 1
  1074. JUMPROBOT
  1075.  jsr ItsARobot
  1076.  bra doneobj
  1077.  
  1078.  jsr ItsABigNasty
  1079.  bra doneobj
  1080.  
  1081. JUMPFLYINGNASTY
  1082.  jsr ItsAFlyingNasty
  1083.  bra doneobj
  1084. JUMPAMMO
  1085.  jsr ItsAnAmmoClip
  1086.  bra doneobj
  1087. JUMPBARREL
  1088.  jsr ItsABarrel
  1089.  bra doneobj
  1090.  
  1091. ; ELEVEN IS PLAYER 2
  1092.  
  1093. JUMPMARINE
  1094.  jsr ItsAMutantMarine
  1095.  bra doneobj
  1096. JUMPWORM
  1097.  jsr ItsAHalfWorm
  1098.  bra doneobj
  1099. JUMPWELLHARD
  1100.  jsr ItsABigRedThing
  1101.  bra doneobj
  1102. JUMPTREE:
  1103.  jsr ItsATree
  1104.  bra doneobj
  1105. JUMPEYEBALL
  1106.  jsr ItsAEyeBall
  1107.  bra doneobj
  1108. JUMPTOUGHMARINE:
  1109.  jsr ItsAToughMarine
  1110.  bra doneobj
  1111. JUMPFLAMEMARINE:
  1112.  jsr ItsAFlameMarine
  1113.  bra doneobj
  1114. JUMPGASPIPE:
  1115.  jsr ItsAGasPipe
  1116.  bra doneobj
  1117.  
  1118.  
  1119. ItsAGasPipe:
  1120.  
  1121.  clr.b worry(a0)
  1122.  
  1123.  move.w TempFrames,d0
  1124.  tst.w ThirdTimer(a0)
  1125.  ble.s maybeflame
  1126.  
  1127.  sub.w d0,ThirdTimer(a0)
  1128.  move.w #5,SecTimer(a0)
  1129.  move.w #10,FourthTimer(a0)
  1130.  rts
  1131.  
  1132. maybeflame:
  1133.  
  1134.  sub.w d0,FourthTimer(a0)
  1135.  blt.s yesflame
  1136.  rts
  1137.  
  1138. yesflame:
  1139.  move.w #10,FourthTimer(a0)
  1140.  sub.w #1,SecTimer(a0)
  1141.  bgt.s notdoneflame
  1142.  
  1143.  move.w ObjTimer(a0),ThirdTimer(a0)
  1144.  
  1145. notdoneflame:
  1146.  
  1147.  cmp.w #4,SecTimer(a0)
  1148.  bne.s .nowhoosh
  1149.  
  1150.  movem.l d0-d7/a0-a6,-(a7)
  1151.  move.l #ObjRotated,a1
  1152.  move.w (a0),d0
  1153.  lea (a1,d0.w*8),a1
  1154.  move.l (a1),Noisex
  1155.  move.w #200,Noisevol
  1156.  move.w #22,Samplenum
  1157.  move.b #1,chanpick
  1158.  clr.b notifplaying
  1159.  move.b 1(a0),IDNUM
  1160.  jsr MakeSomeNoise
  1161.  movem.l (a7)+,d0-d7/a0-a6
  1162.  
  1163. .nowhoosh:
  1164.  
  1165. ; Gas pipe: facing direction is given by
  1166. ; leved (perpendicular to wall) so
  1167. ; just continuously spray out flame!
  1168.  move.l NastyShotData,a5
  1169.  move.w #19,d1
  1170. .findonefree
  1171.  move.w 12(a5),d0
  1172.  blt.s .foundonefree
  1173.  adda.w #64,a5
  1174.  dbra d1,.findonefree
  1175.  
  1176.  rts
  1177.  
  1178. .foundonefree:
  1179.  
  1180.  move.b #2,16(a5)
  1181.  move.w 12(a0),12(a5)
  1182.  move.w 4(a0),d0
  1183.  sub.w #80,d0
  1184.  move.w d0,4(a5)
  1185.  ext.l d0
  1186.  asl.l #7,d0
  1187.  move.l d0,accypos(a5)
  1188.  clr.b shotstatus(a5)
  1189.  move.w #0,shotyvel(a5)
  1190.  move.w (a0),d0
  1191.  move.w (a5),d1
  1192.  move.l ObjectPoints,a1
  1193.  move.l (a1,d0.w*8),(a1,d1.w*8)
  1194.  move.l 4(a1,d0.w*8),4(a1,d1.w*8)
  1195.  move.b #3,shotsize(a5)
  1196.  move.w #0,shotflags(a5)
  1197.  move.w #0,shotgrav(a5)
  1198.  move.b #7,shotpower(a5)
  1199.  move.l #%100000100000,EnemyFlags(a5)
  1200.  move.w #0,shotanim(a5)
  1201.  move.w #0,shotlife(a5)
  1202.  move.l #SineTable,a1
  1203.  move.w Facing(a0),d0
  1204.  move.w (a1,d0.w),d1
  1205.  adda.w #2048,a1
  1206.  move.w (a1,d0.w),d2
  1207.  ext.l d1
  1208.  ext.l d2
  1209.  asl.l #4,d1
  1210.  asl.l #4,d2
  1211.  swap d1
  1212.  swap d2
  1213.  move.w d1,shotxvel(a5)
  1214.  move.w d2,shotzvel(a5)
  1215.  st worry(a5)
  1216.  
  1217.  rts
  1218.  
  1219. ; include "ab3:source/AI.s"
  1220.  
  1221. ItsABarrel:
  1222.  
  1223.  clr.b worry(a0)
  1224.  move.w 12(a0),GraphicRoom(a0)
  1225.  
  1226.  cmp.w #8,8(a0)
  1227.  bne.s notexploding
  1228.  
  1229.  add.w #$404,6(a0)
  1230.  
  1231.  move.w 10(a0),d0
  1232.  add.w #1,d0
  1233.  cmp.w #8,d0
  1234.  bne.s .notdone
  1235.  
  1236.  move.w #-1,12(a0)
  1237.  move.w #-1,GraphicRoom(a0)
  1238.  rts
  1239.  
  1240. .notdone:
  1241.  move.w d0,10(a0)
  1242.  rts
  1243.  
  1244. notexploding:
  1245.  
  1246.  move.w #$1f1f,14(a0)
  1247.  
  1248.  move.w 12(a0),d0
  1249.  move.l ZoneAdds,a1
  1250.  move.l (a1,d0.w*4),a1
  1251.  add.l LEVELDATA,a1
  1252.  move.l ToZoneFloor(a1),d0
  1253.  tst.b ObjInTop(a0)
  1254.  beq.s .okinbot
  1255.  move.l ToUpperFloor(a1),d0
  1256. .okinbot:
  1257.  asr.l #7,d0
  1258.  sub.w #60,d0
  1259.  move.w d0,4(a0)
  1260.  
  1261.  moveq #0,d2
  1262.  move.b damagetaken(a0),d2
  1263.  beq.s nodamage
  1264.  move.b #0,damagetaken(a0)
  1265.  sub.b d2,numlives(a0)
  1266.  bgt.s nodamage
  1267.  move.b #0,numlives(a0)
  1268.  
  1269.  movem.l d0-d7/a0-a6,-(a7)
  1270.  
  1271.  move.w (a0),d0
  1272.  move.l ObjectPoints,a1
  1273.  move.w (a1,d0.w*8),Viewerx
  1274.  move.w 4(a1,d0.w*8),Viewerz
  1275.  move.w #40,d0
  1276.  jsr ComputeBlast
  1277.  
  1278.  move.w (a0),d0
  1279.  move.l #ObjRotated,a1
  1280.  move.l (a1,d0.w*8),Noisex
  1281.  move.w #300,Noisevol
  1282.  move.w #15,Samplenum
  1283.  jsr MakeSomeNoise
  1284.  
  1285.  movem.l (a7)+,d0-d7/a0-a6
  1286.  move.w #8,8(a0)
  1287.  move.w #0,10(a0)
  1288.  move.w #$2020,14(a0)
  1289.  move.w #-30,2(a0)
  1290.  
  1291.  rts
  1292.  
  1293. nodamage:
  1294.  
  1295.  move.w (a0),d0
  1296.  move.l ObjectPoints,a1
  1297.  move.w (a1,d0.w*8),Viewerx
  1298.  move.w 4(a1,d0.w*8),Viewerz
  1299.  move.b ObjInTop(a0),ViewerTop
  1300.  move.b PLR1_StoodInTop,TargetTop
  1301.  move.l PLR1_Roompt,ToRoom
  1302.  
  1303.  move.w 12(a0),d0
  1304.  move.l ZoneAdds,a1
  1305.  move.l (a1,d0.w*4),a1
  1306.  add.l LEVELDATA,a1
  1307.  move.l a1,FromRoom
  1308.   
  1309.  move.w PLR1_xoff,Targetx
  1310.  move.w PLR1_zoff,Targetz
  1311.  move.l PLR1_yoff,d0
  1312.  asr.l #7,d0
  1313.  move.w d0,Targety
  1314.  move.w 4(a0),Viewery
  1315.  jsr CanItBeSeen
  1316.  
  1317.  clr.b 17(a0)
  1318.  tst.b CanSee
  1319.  beq .noseeplr1
  1320.  move.b #1,17(a0)
  1321.  
  1322. .noseeplr1:
  1323.  
  1324.  move.b PLR2_StoodInTop,TargetTop
  1325.  move.l PLR2_Roompt,ToRoom
  1326.  move.w PLR2_xoff,Targetx
  1327.  move.w PLR2_zoff,Targetz
  1328.  move.l PLR2_yoff,d0
  1329.  asr.l #7,d0
  1330.  move.w d0,Targety
  1331.  move.w 4(a0),Viewery
  1332.  jsr CanItBeSeen
  1333.  
  1334.  tst.b CanSee
  1335.  beq .noseeplr2
  1336.  or.b #2,17(a0)
  1337.  
  1338. .noseeplr2:
  1339.  
  1340.  
  1341.  rts
  1342.  
  1343.  include "ab3:source/aliencontrol.s"
  1344.  
  1345. nextCPt: dc.w 0
  1346.  
  1347. RipTear: dc.l 256*17*65536
  1348. otherrip: dc.l 256*18*65536
  1349.  
  1350. ItsAMediKit:
  1351.  
  1352.  clr.b worry(a0)
  1353.  move.w 12(a0),GraphicRoom(a0)
  1354.  
  1355.  move.w 12(a0),d0
  1356.  move.l ZoneAdds,a1
  1357.  move.l (a1,d0.w*4),a1
  1358.  add.l LEVELDATA,a1
  1359.  move.l ToZoneFloor(a1),d0
  1360.  tst.b ObjInTop(a0)
  1361.  beq.s .okinbot
  1362.  move.l ToUpperFloor(a1),d0
  1363. .okinbot:
  1364.  asr.l #7,d0
  1365.  sub.w #32,d0
  1366.  move.w d0,4(a0)
  1367.  
  1368.  
  1369. HealFactor EQU 18
  1370.  
  1371.  
  1372.  cmp.w #127,PLR1_energy
  1373.  bge .NotSameZone
  1374.  
  1375.  move.b PLR1_StoodInTop,d0
  1376.  move.b ObjInTop(a0),d1
  1377.  eor.b d1,d0
  1378.  bne .NotSameZone
  1379.  
  1380.  move.w PLR1_xoff,oldx
  1381.  move.w PLR1_zoff,oldz
  1382.  move.w PLR1_Zone,d7
  1383.  
  1384.  cmp.w 12(a0),d7
  1385.  bne .NotSameZone
  1386.  move.w (a0),d0
  1387.  move.l ObjectPoints,a1
  1388.  move.w (a1,d0.w*8),newx
  1389.  move.w 4(a1,d0.w*8),newz
  1390.  move.l #100*100,d2
  1391.  jsr CheckHit
  1392.  tst.b hitwall
  1393.  beq .NotPickedUp
  1394.  
  1395.  move.l PLR1_Obj,a2
  1396.  move.w (a2),d0
  1397.  move.l #ObjRotated,a2
  1398.  move.l (a2,d0.w*8),Noisex
  1399.  move.w #50,Noisevol
  1400.  move.w #4,Samplenum
  1401.  move.b #2,chanpick
  1402.  clr.b notifplaying
  1403.  move.b 1(a0),IDNUM
  1404.  movem.l a0/a1/d2/d6/d7,-(a7)
  1405.  jsr MakeSomeNoise
  1406.  movem.l (a7)+,a0/a1/d2/d6/d7
  1407.  
  1408.  move.w #-1,12(a0)
  1409.  move.w #-1,GraphicRoom(a0)
  1410.  move.w HealFactor(a0),d0
  1411.  add.w PLR1_energy,d0
  1412.  cmp.w #127,d0
  1413.  ble.s .okokokokokok
  1414.  move.w #127,d0
  1415. .okokokokokok:
  1416.  move.w d0,PLR1_energy
  1417.  
  1418. .NotPickedUp:
  1419.  
  1420. .NotSameZone:
  1421.  
  1422. MEDIPLR2
  1423.  
  1424.  cmp.w #127,PLR2_energy
  1425.  bge .NotSameZone
  1426.  
  1427.  move.b PLR2_StoodInTop,d0
  1428.  move.b ObjInTop(a0),d1
  1429.  eor.b d1,d0
  1430.  bne .NotSameZone
  1431.  
  1432.  move.w PLR2_xoff,oldx
  1433.  move.w PLR2_zoff,oldz
  1434.  move.w PLR2_Zone,d7
  1435.  move.w 12(a0),d0
  1436.  
  1437.  cmp.w 12(a0),d7
  1438.  bne .NotSameZone
  1439.  move.w (a0),d0
  1440.  move.l ObjectPoints,a1
  1441.  move.w (a1,d0.w*8),newx
  1442.  move.w 4(a1,d0.w*8),newz
  1443.  move.l #100*100,d2
  1444.  jsr CheckHit
  1445.  tst.b hitwall
  1446.  beq .NotPickedUp
  1447.  
  1448.  move.l PLR2_Obj,a2
  1449.  move.w (a2),d0
  1450.  move.l #ObjRotated,a2
  1451.  move.l (a2,d0.w*8),Noisex
  1452.  move.w #50,Noisevol
  1453.  move.w #4,Samplenum
  1454.  move.b #2,chanpick
  1455.  clr.b notifplaying
  1456.  move.b 1(a0),IDNUM
  1457.  movem.l a0/a1/d2/d6/d7,-(a7)
  1458.  jsr MakeSomeNoise
  1459.  movem.l (a7)+,a0/a1/d2/d6/d7
  1460.  
  1461.  move.w #-1,12(a0)
  1462.  move.w #-1,GraphicRoom(a0)
  1463.  move.w HealFactor(a0),d0
  1464.  add.w PLR2_energy,d0
  1465.  cmp.w #127,d0
  1466.  ble.s .okokokokokok
  1467.  move.w #127,d0
  1468. .okokokokokok:
  1469.  move.w d0,PLR2_energy
  1470.  
  1471. .NotPickedUp:
  1472.  
  1473. .NotSameZone:
  1474.  
  1475.  
  1476.  rts
  1477.  
  1478. AMGR:
  1479.  dc.w 3,4,5,0,29,0,0,28
  1480.  
  1481. ItsAnAmmoClip:
  1482.  
  1483.  move.w #$0f0f,14(a0)
  1484.  clr.b worry(a0)
  1485.  move.w 12(a0),GraphicRoom(a0)
  1486.  
  1487. AmmoType EQU 18
  1488.  move.w AmmoType(a0),d0
  1489.  move.w AMGR(pc,d0.w*2),10(a0)
  1490.  
  1491.  move.b PLR1_StoodInTop,d0
  1492.  move.b ObjInTop(a0),d1
  1493.  eor.b d1,d0
  1494.  bne .NotSameZone
  1495.  move.w PLR1_xoff,oldx
  1496.  move.w PLR1_zoff,oldz
  1497.  move.w PLR1_Zone,d7
  1498.  move.w 12(a0),d0
  1499.  move.l ZoneAdds,a1
  1500.  move.l (a1,d0.w*4),a1
  1501.  add.l LEVELDATA,a1
  1502.  move.l ToZoneFloor(a1),d0
  1503.  tst.b ObjInTop(a0)
  1504.  beq.s .okinbot
  1505.  move.l ToUpperFloor(a1),d0
  1506. .okinbot:
  1507.   asr.l #7,d0
  1508.  sub.w #32,d0
  1509.  move.w d0,4(a0)
  1510.  
  1511.  cmp.w 12(a0),d7
  1512.  bne .NotSameZone
  1513.  move.w (a0),d0
  1514.  move.l ObjectPoints,a1
  1515.  move.w (a1,d0.w*8),newx
  1516.  move.w 4(a1,d0.w*8),newz
  1517.  move.l #100*100,d2
  1518.  jsr CheckHit
  1519.  tst.b hitwall
  1520.  beq .NotPickedUp
  1521.  
  1522.  move.w AmmoType(a0),d0
  1523.  lea PLR1_GunData,a6
  1524.  lsl.w #2,d0
  1525.  lea (a6,d0.w*8),a6
  1526.  cmp.w #80*8,(a6)
  1527.  bge .NotPickedUp
  1528.  
  1529.  move.l PLR1_Obj,a2
  1530.  move.w (a2),d0
  1531.  move.l #ObjRotated,a2
  1532.  move.l (a2,d0.w*8),Noisex
  1533.  move.w #50,Noisevol
  1534.  move.w #11,Samplenum
  1535.  clr.b notifplaying
  1536.  move.b 1(a0),IDNUM
  1537.  movem.l a0/a1/d2/d6/d7,-(a7)
  1538.  jsr MakeSomeNoise
  1539.  movem.l (a7)+,a0/a1/d2/d6/d7
  1540.  
  1541.  move.w #-1,12(a0)
  1542.  move.w #-1,GraphicRoom(a0)
  1543.  move.w AmmoType(a0),d0
  1544.  lea PLR1_GunData,a6
  1545.  lsl.w #2,d0
  1546.  lea (a6,d0.w*8),a6
  1547.  moveq #0,d0
  1548.  move.b 4(a6),d0
  1549.  asl.w #3,d0
  1550.  move.w (a6),d1
  1551.  add.w d0,d1
  1552.  move.w d1,(a6)
  1553.  
  1554. .NotPickedUp:
  1555.  
  1556. .NotSameZone:
  1557.  
  1558. AMMOPLR2:
  1559.  
  1560.  move.b PLR2_StoodInTop,d0
  1561.  move.b ObjInTop(a0),d1
  1562.  eor.b d1,d0
  1563.  bne .NotSameZone
  1564.  move.w PLR2_xoff,oldx
  1565.  move.w PLR2_zoff,oldz
  1566.  move.w PLR2_Zone,d7
  1567.  move.w 12(a0),d0
  1568.  move.l ZoneAdds,a1
  1569.  move.l (a1,d0.w*4),a1
  1570.  add.l LEVELDATA,a1
  1571.  move.l ToZoneFloor(a1),d0
  1572.  tst.b ObjInTop(a0)
  1573.  beq.s .okinbot
  1574.  move.l ToUpperFloor(a1),d0
  1575. .okinbot:
  1576.   asr.l #7,d0
  1577.  sub.w #16,d0
  1578.  move.w d0,4(a0)
  1579.  
  1580.  cmp.w 12(a0),d7
  1581.  bne .NotSameZone
  1582.  move.w (a0),d0
  1583.  move.l ObjectPoints,a1
  1584.  move.w (a1,d0.w*8),newx
  1585.  move.w 4(a1,d0.w*8),newz
  1586.  move.l #100*100,d2
  1587.  jsr CheckHit
  1588.  tst.b hitwall
  1589.  beq .NotPickedUp
  1590.  
  1591.  move.w AmmoType(a0),d0
  1592.  lea PLR2_GunData,a6
  1593.  lsl.w #2,d0
  1594.  lea (a6,d0.w*8),a6
  1595.  cmp.w #80*8,(a6)
  1596.  bge .NotPickedUp
  1597.  
  1598.  
  1599.  move.l PLR2_Obj,a2
  1600.  move.w (a2),d0
  1601.  move.l #ObjRotated,a2
  1602.  move.l (a2,d0.w*8),Noisex
  1603.  move.w #50,Noisevol
  1604.  move.w #11,Samplenum
  1605.  clr.b notifplaying
  1606.  move.b 1(a0),IDNUM
  1607.  movem.l a0/a1/d2/d6/d7,-(a7)
  1608.  jsr MakeSomeNoise
  1609.  movem.l (a7)+,a0/a1/d2/d6/d7
  1610.  
  1611.  move.w #-1,12(a0)
  1612.  move.w #-1,GraphicRoom(a0)
  1613.  move.w AmmoType(a0),d0
  1614.  lea PLR2_GunData,a6
  1615.  lsl.w #2,d0
  1616.  lea (a6,d0.w*8),a6
  1617.  moveq #0,d0
  1618.  move.b 4(a6),d0
  1619.  asl.w #3,d0
  1620.  move.w (a6),d1
  1621.  add.w d0,d1
  1622.  move.w d1,(a6)
  1623.  
  1624. .NotPickedUp:
  1625.  
  1626. .NotSameZone:
  1627.  
  1628.  
  1629.  rts
  1630.  
  1631.  
  1632. ItsABigGun:
  1633.  move.w 12(a0),GraphicRoom(a0)
  1634.  
  1635.  clr.b worry(a0)
  1636.  
  1637.  move.b PLR1_StoodInTop,d0
  1638.  move.b ObjInTop(a0),d1
  1639.  eor.b d1,d0
  1640.  bne .NotSameZone
  1641.  move.w PLR1_xoff,oldx
  1642.  move.w PLR1_zoff,oldz
  1643.  move.w PLR1_Zone,d7
  1644.  move.w 12(a0),d0
  1645.  move.l ZoneAdds,a1
  1646.  move.l (a1,d0.w*4),a1
  1647.  add.l LEVELDATA,a1
  1648.  move.l ToZoneFloor(a1),d0
  1649.  tst.b ObjInTop(a0)
  1650.  beq.s .okinbot
  1651.  move.l ToUpperFloor(a1),d0
  1652. .okinbot:
  1653.   asr.l #7,d0
  1654. ; add.w #16,d0
  1655.  moveq #0,d1
  1656.  move.b 7(a0),d1
  1657.  sub.w d1,d0
  1658.  
  1659.  move.w d0,4(a0)
  1660.  cmp.w 12(a0),d7
  1661.  bne .NotSameZone
  1662.  move.w (a0),d0
  1663.  move.l ObjectPoints,a1
  1664.  move.w (a1,d0.w*8),newx
  1665.  move.w 4(a1,d0.w*8),newz
  1666.  move.l #100*100,d2
  1667.  jsr CheckHit
  1668.  tst.b hitwall
  1669.  beq .NotPickedUp
  1670.  
  1671.  move.l PLR1_Obj,a2
  1672.  move.w (a2),d0
  1673.  move.l #ObjRotated,a2
  1674.  move.l (a2,d0.w*8),Noisex
  1675.  move.w #50,Noisevol
  1676.  move.w #4,Samplenum
  1677.  move.b #2,chanpick
  1678.  clr.b notifplaying
  1679.  move.b 1(a0),IDNUM
  1680.  movem.l a0/a1/d2/d6/d7,-(a7)
  1681.  jsr MakeSomeNoise
  1682.  movem.l (a7)+,a0/a1/d2/d6/d7
  1683.  
  1684.  move.l #Cheese,FacesPtr
  1685.  move.w #4,Cheese
  1686.  move.w #-1,FacesCounter
  1687.  moveq #0,d0
  1688.  move.b 17(a0),d0
  1689.  move.l #PLR1_GunData+32,a1
  1690.  move.l #AmmoInGuns,a2
  1691.  move.w d0,d1
  1692.  lsl.w #2,d0
  1693.  st 7(a1,d0.w*8)
  1694.  move.w (a2,d1.w*2),d1
  1695.  add.w d1,(a1,d0.w*8)
  1696.  
  1697.  
  1698.  move.w #-1,12(a0)
  1699.  move.w #-1,GraphicRoom(a0)
  1700.  
  1701. .NotPickedUp:
  1702.  
  1703. .NotSameZone:
  1704.  
  1705. GUNPLR2:
  1706.  
  1707.  move.b PLR2_StoodInTop,d0
  1708.  move.b ObjInTop(a0),d1
  1709.  eor.b d1,d0
  1710.  bne .NotSameZone
  1711.  move.w PLR2_xoff,oldx
  1712.  move.w PLR2_zoff,oldz
  1713.  move.w PLR2_Zone,d7
  1714.  move.w 12(a0),d0
  1715.  move.l ZoneAdds,a1
  1716.  move.l (a1,d0.w*4),a1
  1717.  add.l LEVELDATA,a1
  1718.  move.l ToZoneFloor(a1),d0
  1719.  tst.b ObjInTop(a0)
  1720.  beq.s .okinbot
  1721.  move.l ToUpperFloor(a1),d0
  1722. .okinbot:
  1723.   asr.l #7,d0
  1724. ; add.w #16,d0
  1725.  moveq #0,d1
  1726.  move.b 7(a0),d1
  1727.  sub.w d1,d0
  1728.  
  1729.  move.w d0,4(a0)
  1730.  cmp.w 12(a0),d7
  1731.  bne .NotSameZone
  1732.  move.w (a0),d0
  1733.  move.l ObjectPoints,a1
  1734.  move.w (a1,d0.w*8),newx
  1735.  move.w 4(a1,d0.w*8),newz
  1736.  move.l #100*100,d2
  1737.  jsr CheckHit
  1738.  tst.b hitwall
  1739.  beq .NotPickedUp
  1740.  
  1741.  move.l PLR2_Obj,a2
  1742.  move.w (a2),d0
  1743.  move.l #ObjRotated,a2
  1744.  move.l (a2,d0.w*8),Noisex
  1745.  move.w #50,Noisevol
  1746.  move.w #4,Samplenum
  1747.  move.b #2,chanpick
  1748.  clr.b notifplaying
  1749.  move.b 1(a0),IDNUM
  1750.  movem.l a0/a1/d2/d6/d7,-(a7)
  1751.  jsr MakeSomeNoise
  1752.  movem.l (a7)+,a0/a1/d2/d6/d7
  1753.  
  1754.  move.l #Cheese,FacesPtr
  1755.  move.w #4,Cheese
  1756.  move.w #-1,FacesCounter
  1757.  moveq #0,d0
  1758.  move.b 17(a0),d0
  1759.  move.l #PLR2_GunData+32,a1
  1760.  move.l #AmmoInGuns,a2
  1761.  move.w d0,d1
  1762.  lsl.w #2,d0
  1763.  st 7(a1,d0.w*8)
  1764.  move.w (a2,d1.w*2),d1
  1765.  add.w d1,(a1,d0.w*8)
  1766.  
  1767.  
  1768.  move.w #-1,12(a0)
  1769.  move.w #-1,GraphicRoom(a0)
  1770.  
  1771. .NotPickedUp:
  1772.  
  1773. .NotSameZone:
  1774.  
  1775.  
  1776.  rts
  1777.  
  1778. OFFSETTOGRAPH:
  1779.  dc.l (40*8)*43+10
  1780.  dc.l (40*8)*11+12
  1781.  dc.l (40*8)*11+22
  1782.  dc.l (40*8)*43+24
  1783.  
  1784. AmmoInGuns:
  1785.  dc.w 0
  1786.  dc.w 5
  1787.  dc.w 1
  1788.  dc.w 0
  1789.  dc.w 1
  1790.  dc.w 0
  1791.  dc.w 0
  1792.  dc.w 5
  1793.  
  1794. ItsAKey:
  1795.  
  1796.  move.w #$0f0f,14(a0)
  1797.  
  1798.  tst.b NASTY
  1799.  bne .yesnas
  1800.  move.w #-1,12(a0)
  1801.  rts
  1802. .yesnas:
  1803.  
  1804.  move.w 12(a0),GraphicRoom(a0)
  1805.  clr.b worry(a0)
  1806.  
  1807.  move.b PLR1_StoodInTop,d0
  1808.  move.b ObjInTop(a0),d1
  1809.  eor.b d1,d0
  1810.  bne .NotSameZone
  1811.  
  1812.  move.w PLR1_xoff,oldx
  1813.  move.w PLR1_zoff,oldz
  1814.  move.w PLR1_Zone,d7
  1815.  move.w 12(a0),d0
  1816.  move.l ZoneAdds,a1
  1817.  move.l (a1,d0.w*4),a1
  1818.  add.l LEVELDATA,a1
  1819.  move.l 2(a1),d0
  1820.  asr.l #7,d0
  1821.  sub.w #16,d0
  1822.  move.w d0,4(a0)
  1823.  cmp.w 12(a0),d7
  1824.  bne .NotSameZone
  1825.  move.w (a0),d0
  1826.  move.l ObjectPoints,a1
  1827.  move.w (a1,d0.w*8),newx
  1828.  move.w 4(a1,d0.w*8),newz
  1829.  move.l #100*100,d2
  1830.  jsr CheckHit
  1831.  tst.b hitwall
  1832.  beq .NotPickedUp
  1833.  
  1834.  move.w #0,Noisex
  1835.  move.w #0,Noisez
  1836.  move.w #50,Noisevol
  1837.  move.w #4,Samplenum
  1838.  move.b #2,chanpick
  1839.  clr.b notifplaying
  1840.  move.b 1(a0),IDNUM
  1841.  movem.l a0/a1/d2/d6/d7,-(a7)
  1842.  jsr MakeSomeNoise
  1843.  movem.l (a7)+,a0/a1/d2/d6/d7
  1844.  
  1845.  move.w #-1,12(a0)
  1846.  move.w #-1,GraphicRoom(a0)
  1847.  move.b 17(a0),d0
  1848.  or.b d0,Conditions+1
  1849.  
  1850.  move.l Panel,a2
  1851.  moveq #0,d1
  1852.  lsr.b #1,d0
  1853.  bcs.s .done
  1854.  addq #1,d1
  1855.  lsr.b #1,d0
  1856.  bcs.s .done
  1857.  addq #1,d1
  1858.  lsr.b #1,d0
  1859.  bcs.s .done
  1860.  addq #1,d1 
  1861. .done
  1862.  
  1863.  move.l #OFFSETTOGRAPH,a1
  1864.  add.l (a1,d1.w*4),a2
  1865.  move.l #PanelKeys,a1
  1866.  
  1867.  muls #6*22*8,d1
  1868.  
  1869.  adda.w d1,a1
  1870.  
  1871.  move.w #22*8-1,d0    ;lines
  1872. .lines:
  1873.  
  1874.  move.l (a1)+,d1
  1875.  or.l d1,(a2)
  1876.  move.w (a1)+,d1
  1877.  or.w d1,4(a2)
  1878.  adda.w #40,a2
  1879.  
  1880.  dbra d0,.lines
  1881.  
  1882.  
  1883. .NotPickedUp:
  1884.  
  1885. .NotSameZone:
  1886.  
  1887.  rts
  1888.  
  1889. Conditions: dc.l 0
  1890.  
  1891. ; Format of animations:
  1892. ; Size (-1 = and of anim) (w)
  1893. ; Address of Frame. (l)
  1894. ; height offset (w)
  1895.  
  1896. Bul1Anim:
  1897.  dc.w 20*256+15
  1898.  dc.w 6,8
  1899.  dc.w 0
  1900.  dc.w 17*256+17
  1901.  dc.w 6,9
  1902.  dc.w 0
  1903.  dc.w 15*256+20
  1904.  dc.w 6,10
  1905.  dc.w 0
  1906.  dc.w 17*256+17
  1907.  dc.w 6,11
  1908.  dc.w 0
  1909.  dc.l -1
  1910.  
  1911. Bul1Pop
  1912.  dc.b 25,25
  1913.  dc.w 1,6
  1914.  dc.w 0
  1915.  dc.b 25,25
  1916.  dc.w 1,7
  1917.  dc.w -4
  1918.  dc.b 25,25
  1919.  dc.w 1,8
  1920.  dc.w -4
  1921.  dc.b 25,25
  1922.  dc.w 1,9
  1923.  dc.w -4
  1924.  dc.b 25,25
  1925.  dc.w 1,10
  1926.  dc.w -4
  1927.  dc.b 25,25
  1928.  dc.w 1,11
  1929.  dc.w -4
  1930.  dc.b 25,25
  1931.  dc.w 1,12
  1932.  dc.w -4
  1933.  dc.b 25,25
  1934.  dc.w 1,13
  1935.  dc.w -4
  1936.  dc.b 25,25
  1937.  dc.w 1,14
  1938.  dc.w -4
  1939.  dc.b 25,25
  1940.  dc.w 1,15
  1941.  dc.w -4
  1942.  dc.b 25,25
  1943.  dc.w 1,16
  1944.  dc.w -4
  1945.  dc.l -1
  1946.  
  1947. Bul3Anim:
  1948.  dc.b 25,25
  1949.  dc.w 0,12
  1950.  dc.w 0
  1951.  dc.b 25,25
  1952.  dc.w 0,13
  1953.  dc.w 0
  1954.  dc.b 25,25
  1955.  dc.w 0,14
  1956.  dc.w 0
  1957.  dc.b 25,25
  1958.  dc.w 0,15
  1959.  dc.w 0
  1960.  dc.l -1
  1961.  
  1962. Bul3Pop:
  1963.  dc.l -1
  1964.  
  1965. Bul4Anim:
  1966.  dc.b 25,25
  1967.  dc.w 6,4
  1968.  dc.w 0
  1969.  dc.b 25,25
  1970.  dc.w 6,5
  1971.  dc.w 0
  1972.  dc.b 25,25
  1973.  dc.w 6,6
  1974.  dc.w 0
  1975.  dc.b 25,25
  1976.  dc.w 6,7
  1977.  dc.w 0
  1978.  dc.l -1
  1979.  
  1980. Bul4Pop:
  1981.  dc.b 20,20
  1982.  dc.w 6,4
  1983.  dc.w 0
  1984.  dc.b 15,15
  1985.  dc.w 6,5
  1986.  dc.w 0
  1987.  dc.b 10,10
  1988.  dc.w 6,6
  1989.  dc.w 0
  1990.  dc.b 5,5
  1991.  dc.w 6,7
  1992.  dc.w 0
  1993.  dc.l -1
  1994.  
  1995. Bul5Anim:
  1996.  dc.b 10,10
  1997.  dc.w 6,4
  1998.  dc.w 0
  1999.  dc.b 10,10
  2000.  dc.w 6,5
  2001.  dc.w 0
  2002.  dc.b 10,10
  2003.  dc.w 6,6
  2004.  dc.w 0
  2005.  dc.b 10,10
  2006.  dc.w 6,7
  2007.  dc.w 0
  2008.  dc.l -1
  2009.  
  2010. Bul5Pop:
  2011.  dc.b 8,8
  2012.  dc.w 6,4
  2013.  dc.w 0
  2014.  dc.b 6,6
  2015.  dc.w 6,5
  2016.  dc.w 0
  2017.  dc.b 4,4
  2018.  dc.w 6,6
  2019.  dc.w 0
  2020.  dc.l -1
  2021.  
  2022. grenAnim:
  2023.  dc.b 25,25
  2024.  dc.w 1,21
  2025.  dc.w 0
  2026.  dc.b 25,25
  2027.  dc.w 1,22
  2028.  dc.w 0
  2029.  dc.b 25,25
  2030.  dc.w 1,23
  2031.  dc.w 0
  2032.  dc.b 25,25
  2033.  dc.w 1,24
  2034.  dc.w 0
  2035.  dc.l -1
  2036.  
  2037. Bul2Anim:
  2038.  dc.b 25,25
  2039.  dc.w 2,0
  2040.  dc.w 0
  2041.  dc.b 25,25
  2042.  dc.w 2,1
  2043.  dc.w 0
  2044.  dc.b 25,25
  2045.  dc.w 2,2
  2046.  dc.w 0
  2047.  dc.b 25,25
  2048.  dc.w 2,3
  2049.  dc.w 0
  2050.  dc.b 25,25
  2051.  dc.w 2,4
  2052.  dc.w 0
  2053.  dc.b 25,25
  2054.  dc.w 2,5
  2055.  dc.w 0
  2056.  dc.b 25,25
  2057.  dc.w 2,6
  2058.  dc.w 0
  2059.  dc.b 25,25
  2060.  dc.w 2,7
  2061.  dc.w 0
  2062.  dc.w -1
  2063.  
  2064.  
  2065. Bul2Pop:
  2066.  dc.b 25,25
  2067.  dc.w 2,8
  2068.  dc.w -4
  2069.  dc.b 29,29
  2070.  dc.w 2,9
  2071.  dc.w -4
  2072.  dc.b 33,33
  2073.  dc.w 2,10
  2074.  dc.w -4
  2075.  dc.b 37,37
  2076.  dc.w 2,11
  2077.  dc.w -4
  2078.  dc.b 41,41
  2079.  dc.w 2,12
  2080.  dc.w -4
  2081.  dc.b 45,45
  2082.  dc.w 2,13
  2083.  dc.w -4
  2084.  dc.b 49,49
  2085.  dc.w 2,14
  2086.  dc.w -4
  2087.  dc.b 53,53
  2088.  dc.w 2,15
  2089.  dc.w -4
  2090.  dc.b 57,57
  2091.  dc.w 2,16
  2092.  dc.w -4
  2093.  dc.b 61,61
  2094.  dc.w 2,17
  2095.  dc.w -4
  2096.  dc.b 65,65
  2097.  dc.w 2,18
  2098.  dc.w -4
  2099.  dc.b 69,69
  2100.  dc.w 2,19
  2101.  dc.w -4
  2102.  dc.w -1
  2103.  
  2104. RockAnim:
  2105.  dc.b 16,16
  2106.  dc.w 6,0
  2107.  dc.w 0
  2108.  dc.b 16,16
  2109.  dc.w 6,1
  2110.  dc.w 0
  2111.  dc.b 16,16
  2112.  dc.w 6,2
  2113.  dc.w 0
  2114.  dc.b 16,16
  2115.  dc.w 6,3
  2116.  dc.w 0  
  2117.  dc.l -1
  2118.  
  2119. val SET 100
  2120.  
  2121. RockPop:
  2122.  dc.b val,val
  2123.  dc.w 8,0
  2124.  dc.w -4
  2125. val SET val+10 
  2126.  dc.b val,val
  2127.  dc.w 8,1
  2128.  dc.w 0
  2129. val SET val+10 
  2130.  dc.b val,val
  2131.  dc.w 8,2
  2132.  dc.w -4
  2133. val SET val+10 
  2134.  dc.b val,val
  2135.  dc.w 8,3
  2136.  dc.w -4
  2137. val SET val+10 
  2138.  dc.b val,val
  2139.  dc.w 8,4
  2140.  dc.w -4
  2141. val SET val+10 
  2142.  dc.b val,val
  2143.  dc.w 8,4
  2144.  dc.w -4
  2145. val SET val+10 
  2146.  dc.b val,val
  2147.  dc.w 8,5
  2148.  dc.w -4
  2149. val SET val+10 
  2150.  dc.b val,val
  2151.  dc.w 8,5
  2152.  dc.w -4
  2153. val SET val+10 
  2154.  dc.b val,val
  2155.  dc.w 8,6
  2156.  dc.w -4
  2157. val SET val+10 
  2158.  dc.b val,val
  2159.  dc.w 8,6
  2160.  dc.w -4
  2161. val SET val+10 
  2162.  dc.b val,val
  2163.  dc.w 8,7
  2164.  dc.w -4
  2165. val SET val+10 
  2166.  dc.b val,val
  2167.  dc.w 8,7
  2168.  dc.w -4
  2169. val SET val+10 
  2170.  dc.b val,val
  2171.  dc.w 8,8
  2172.  dc.w -4
  2173. val SET val+10 
  2174.  dc.b val,val
  2175.  dc.w 8,8
  2176.  dc.w -4
  2177.  dc.l -1
  2178.  
  2179.  
  2180. val SET 5
  2181.  
  2182. FlameAnim:
  2183.  
  2184.  dc.b val,val
  2185.  dc.w 8,0
  2186.  dc.w 0
  2187. val SET val+4 
  2188.  dc.b val,val
  2189.  dc.w 8,1
  2190.  dc.w 0
  2191. val SET val+4 
  2192.  dc.b val,val
  2193.  dc.w 8,2
  2194.  dc.w 0
  2195. val SET val+4 
  2196.  dc.b val,val
  2197.  dc.w 8,3
  2198.  dc.w 0
  2199. val SET val+4 
  2200.  dc.b val,val
  2201.  dc.w 8,4
  2202.  dc.w 0
  2203. val SET val+4 
  2204.  dc.b val,val
  2205.  dc.w 8,4
  2206.  dc.w 0
  2207. val SET val+4 
  2208.  dc.b val,val
  2209.  dc.w 8,5
  2210.  dc.w 0
  2211. val SET val+4 
  2212.  dc.b val,val
  2213.  dc.w 8,5
  2214.  dc.w 0
  2215. val SET val+4 
  2216.  dc.b val,val
  2217.  dc.w 8,5
  2218.  dc.w 0
  2219. val SET val+4 
  2220.  dc.b val,val
  2221.  dc.w 8,6
  2222.  dc.w 0
  2223. val SET val+4 
  2224.  dc.b val,val
  2225.  dc.w 8,6
  2226.  dc.w 0
  2227. val SET val+4 
  2228.  dc.b val,val
  2229.  dc.w 8,6
  2230.  dc.w 0
  2231. val SET val+6 
  2232.  dc.b val,val
  2233.  dc.w 8,7
  2234.  dc.w 0
  2235. val SET val+8 
  2236.  dc.b val,val
  2237.  dc.w 8,7
  2238.  dc.w 0
  2239. val SET val+8 
  2240.  dc.b val,val
  2241.  dc.w 8,7
  2242.  dc.w 0
  2243. val SET val+8 
  2244.  dc.b val,val
  2245.  dc.w 8,7
  2246.  dc.w 0
  2247. val SET val+8 
  2248.  dc.b val,val
  2249.  dc.w 8,8
  2250.  dc.w 0
  2251. val SET val+8 
  2252.  dc.b val,val
  2253.  dc.w 8,8
  2254.  dc.w 0
  2255. val SET val+8 
  2256.  dc.b val,val
  2257.  dc.w 8,8
  2258.  dc.w 0
  2259.  
  2260.  dc.l -1
  2261.  
  2262. FlamePop:
  2263. val SET 4*35
  2264.  dc.b val,val
  2265.  dc.w 8,7
  2266.  dc.w 0
  2267. val SET val+4 
  2268.  dc.b val,val
  2269.  dc.w 8,7
  2270.  dc.w 0
  2271. val SET val+4 
  2272.  dc.b val,val
  2273.  dc.w 8,7
  2274.  dc.w 0
  2275. val SET val+4 
  2276.  dc.b val,val
  2277.  dc.w 8,8
  2278.  dc.w 0
  2279. val SET val+4 
  2280.  dc.b val,val
  2281.  dc.w 8,8
  2282.  dc.w 0
  2283. val SET val+4 
  2284.  dc.b val,val
  2285.  dc.w 8,8
  2286.  dc.w 0
  2287.  
  2288.  dc.l -1
  2289.  
  2290. Explode1Anim: 
  2291.  dc.b 25,25
  2292.  dc.w 0,16
  2293.  dc.w 0
  2294.  dc.b 25,25
  2295.  dc.w 0,17
  2296.  dc.w 0
  2297.  dc.b 25,25
  2298.  dc.w 0,18
  2299.  dc.w 0
  2300.  dc.b 25,25
  2301.  dc.w 0,19
  2302.  dc.w 0
  2303.  dc.l -1
  2304.  
  2305. Explode1Pop:
  2306.  dc.b 20,20
  2307.  dc.w 0,16
  2308.  dc.w 1
  2309.  dc.b 20,20
  2310.  dc.w 0,16
  2311.  dc.w 1
  2312.  dc.b 20,20
  2313.  dc.w 0,16
  2314.  dc.w 1
  2315.  dc.b 20,20
  2316.  dc.w 0,16
  2317.  dc.w 1
  2318.  dc.b 20,20
  2319.  dc.w 0,16
  2320.  dc.w 1
  2321.  dc.b 20,20
  2322.  dc.w 0,16
  2323.  dc.w 1
  2324.  dc.b 20,20
  2325.  dc.w 0,16
  2326.  dc.w 1
  2327.  dc.b 20,20
  2328.  dc.w 0,16
  2329.  dc.w 1
  2330.  
  2331.  dc.b 17,17
  2332.  dc.w 0,16
  2333.  dc.w 1
  2334.  
  2335.  dc.b 13,13
  2336.  dc.w 0,16
  2337.  dc.w 1
  2338.  
  2339.  dc.b 9,9
  2340.  dc.w 0,16
  2341.  dc.w 1
  2342.  
  2343.  dc.l -1
  2344.  
  2345. Explode2Anim: 
  2346.  dc.b 20,20
  2347.  dc.w 0,20
  2348.  dc.w 0
  2349.  dc.b 20,20
  2350.  dc.w 0,21
  2351.  dc.w 0
  2352.  dc.b 20,20
  2353.  dc.w 0,22
  2354.  dc.w 0
  2355.  dc.b 20,20
  2356.  dc.w 0,23
  2357.  dc.w 0
  2358.  dc.l -1
  2359.  
  2360. Explode2Pop:
  2361.  dc.b 20,20
  2362.  dc.w 0,20
  2363.  dc.w 1
  2364.  dc.b 20,20
  2365.  dc.w 0,20
  2366.  dc.w 1
  2367.  dc.b 20,20
  2368.  dc.w 0,20
  2369.  dc.w 1
  2370.  dc.b 20,20
  2371.  dc.w 0,20
  2372.  dc.w 1
  2373.  dc.b 20,20
  2374.  dc.w 0,20
  2375.  dc.w 1
  2376.  dc.b 20,20
  2377.  dc.w 0,20
  2378.  dc.w 1
  2379.  dc.b 20,20
  2380.  dc.w 0,20
  2381.  dc.w 1
  2382.  dc.b 20,20
  2383.  dc.w 0,20
  2384.  dc.w 1
  2385.  
  2386.  dc.b 17,17
  2387.  dc.w 0,20
  2388.  dc.w 1
  2389.  
  2390.  dc.b 13,13
  2391.  dc.w 0,20
  2392.  dc.w 1
  2393.  
  2394.  dc.b 9,9
  2395.  dc.w 0,20
  2396.  dc.w 1
  2397.  
  2398.  dc.l -1
  2399.  
  2400.  
  2401. Explode3Anim: 
  2402.  dc.b 20,20
  2403.  dc.w 0,24
  2404.  dc.w 0
  2405.  dc.b 20,20
  2406.  dc.w 0,25
  2407.  dc.w 0
  2408.  dc.b 20,20
  2409.  dc.w 0,26
  2410.  dc.w 0
  2411.  dc.b 20,20
  2412.  dc.w 0,27
  2413.  dc.w 0
  2414.  dc.l -1
  2415.  
  2416. Explode3Pop:
  2417.  
  2418.  dc.b 17,17
  2419.  dc.w 0,24
  2420.  dc.w 1
  2421.  dc.b 17,17
  2422.  dc.w 0,24
  2423.  dc.w 1
  2424.  dc.b 17,17
  2425.  dc.w 0,24
  2426.  dc.w 1
  2427.  dc.b 17,17
  2428.  dc.w 0,24
  2429.  dc.w 1
  2430.  dc.b 17,17
  2431.  dc.w 0,24
  2432.  dc.w 1
  2433.  dc.b 17,17
  2434.  dc.w 0,24
  2435.  dc.w 1
  2436.  dc.b 17,17
  2437.  dc.w 0,24
  2438.  dc.w 1
  2439.  dc.b 17,17
  2440.  dc.w 0,24
  2441.  dc.w 1
  2442.  
  2443.  dc.b 13,13
  2444.  dc.w 0,24
  2445.  dc.w 1
  2446.  
  2447.  dc.b 9,9
  2448.  dc.w 0,24
  2449.  dc.w 1
  2450.  
  2451.   dc.l -1
  2452.  
  2453. Explode4Anim: 
  2454.  dc.b 30,30
  2455.  dc.w 0,28
  2456.  dc.w 0
  2457.  dc.b 30,30
  2458.  dc.w 0,29
  2459.  dc.w 0
  2460.  dc.b 30,30
  2461.  dc.w 0,30
  2462.  dc.w 0
  2463.  dc.b 30,30
  2464.  dc.w 0,31
  2465.  dc.w 0
  2466.  dc.l -1
  2467.  
  2468. Explode4Pop:
  2469.  
  2470.  dc.b 20,20
  2471.  dc.w 0,28
  2472.  dc.w 0
  2473.  dc.b 20,20
  2474.  dc.w 0,28
  2475.  dc.w 1
  2476.  dc.b 20,20
  2477.  dc.w 0,28
  2478.  dc.w 1
  2479.  dc.b 20,20
  2480.  dc.w 0,28
  2481.  dc.w 1
  2482.  dc.b 20,20
  2483.  dc.w 0,28
  2484.  dc.w 1
  2485.  dc.b 20,20
  2486.  dc.w 0,28
  2487.  dc.w 1
  2488.  dc.b 20,20
  2489.  dc.w 0,28
  2490.  dc.w 1
  2491.  dc.b 20,20
  2492.  dc.w 0,28
  2493.  dc.w 1
  2494.  
  2495.  dc.b 17,17
  2496.  dc.w 0,28
  2497.  dc.w 1
  2498.  
  2499.  dc.b 13,13
  2500.  dc.w 0,28
  2501.  dc.w 1
  2502.  
  2503.  dc.b 9,9
  2504.  dc.w 0,28
  2505.  dc.w 1
  2506.  
  2507.  dc.l -1
  2508.   
  2509. BulletSizes:
  2510.  dc.w $0f0f,$707
  2511.  dc.w $0f0f,$f0f
  2512.  dc.w $0f0f,$1f1f
  2513.  dc.w $1f1f,$1f1f
  2514.  dc.w $0707,$1f1f
  2515.  dc.w $0f0f,$0f0f
  2516.  dc.w $0f0f,$0f0f
  2517.  dc.w $707,$707
  2518.  dc.w 0,0,0,0
  2519. ;10 
  2520.  dc.w 0,0,0,0,0,0,0,0,0,0
  2521.  dc.w 0,0,0,0,0,0,0,0,0,0
  2522. ;20
  2523.  dc.w 0,0,0,0,0,0,0,0,0,0
  2524.  dc.w 0,0,0,0,0,0,0,0,0,0
  2525. ;30
  2526.  dc.w 0,0,0,0,0,0,0,0,0,0
  2527.  dc.w 0,0,0,0,0,0,0,0,0,0
  2528. ;40
  2529.  dc.w 0,0,0,0,0,0,0,0,0,0
  2530.  dc.w 0,0,0,0,0,0,0,0,0,0
  2531. ;50
  2532.  dc.w $0707,$0707,$0707,$0707
  2533.  dc.w $0707,$0707,$0707,$0707
  2534.  
  2535. HitNoises:
  2536.  dc.l -1,-1
  2537.  dc.w 15,200
  2538.  dc.l -1
  2539.  dc.w 15,200
  2540.  dc.l -1,-1,-1,-1,-1
  2541.  dc.l -1,-1,-1,-1,-1,-1,-1,-1,-1,-1
  2542.  dc.l -1,-1,-1,-1,-1,-1,-1,-1,-1,-1
  2543.  dc.l -1,-1,-1,-1,-1,-1,-1,-1,-1,-1
  2544.  dc.l -1,-1,-1,-1,-1,-1,-1,-1,-1,-1
  2545.  
  2546.  dc.w 13,50,13,50,13,50,13,50
  2547.  
  2548. ExplosiveForce:
  2549.  dc.w 0,0,64,0,40,0,0,0,0,0
  2550.  dc.w 0,0,0,0,0,0,0,0,0,0
  2551.  dc.w 0,0,0,0,0,0,0,0,0,0
  2552.  dc.w 0,0,0,0,0,0,0,0,0,0
  2553.  dc.w 0,0,0,0,0,0,0,0,0,0
  2554.  dc.w 0,0,0,0
  2555.   
  2556. BulletTypes:
  2557.  dc.l Bul1Anim,Bul1Pop
  2558.  dc.l Bul2Anim,Bul2Pop
  2559.  dc.l RockAnim,RockPop
  2560.  dc.l FlameAnim,FlamePop
  2561.  dc.l grenAnim,RockPop
  2562.  dc.l Bul4Anim,Bul4Pop
  2563.  dc.l Bul5Anim,Bul5Pop
  2564.  dc.l Bul1Anim,Bul1Pop
  2565.  dc.l 0,0
  2566.  dc.l 0,0
  2567.  
  2568.  dc.l 0,0
  2569.  dc.l 0,0
  2570.  dc.l 0,0
  2571.  dc.l 0,0
  2572.  dc.l 0,0
  2573.  dc.l 0,0
  2574.  dc.l 0,0
  2575.  dc.l 0,0
  2576.  dc.l 0,0
  2577.  dc.l 0,0
  2578.  
  2579.  dc.l 0,0
  2580.  dc.l 0,0
  2581.  dc.l 0,0
  2582.  dc.l 0,0
  2583.  dc.l 0,0
  2584.  dc.l 0,0
  2585.  dc.l 0,0
  2586.  dc.l 0,0
  2587.  dc.l 0,0
  2588.  dc.l 0,0
  2589.  
  2590.  dc.l 0,0
  2591.  dc.l 0,0
  2592.  dc.l 0,0
  2593.  dc.l 0,0
  2594.  dc.l 0,0
  2595.  dc.l 0,0
  2596.  dc.l 0,0
  2597.  dc.l 0,0
  2598.  dc.l 0,0
  2599.  dc.l 0,0
  2600.  
  2601.  dc.l 0,0
  2602.  dc.l 0,0
  2603.  dc.l 0,0
  2604.  dc.l 0,0
  2605.  dc.l 0,0
  2606.  dc.l 0,0
  2607.  dc.l 0,0
  2608.  dc.l 0,0
  2609.  dc.l 0,0
  2610.  dc.l 0,0
  2611.  
  2612.  dc.l Explode1Anim,Explode1Pop
  2613.  dc.l Explode2Anim,Explode2Pop
  2614.  dc.l Explode3Anim,Explode3Pop
  2615.  dc.l Explode4Anim,Explode4Pop
  2616.  
  2617. tsta: dc.l 0
  2618. timeout: dc.w 0
  2619.  
  2620. ItsABullet:
  2621.  
  2622.  move.b #0,timeout
  2623.  move.w 12(a0),d0
  2624.  move.w d0,GraphicRoom(a0)
  2625.  blt doneshot
  2626.  
  2627.  tst.b shotstatus(a0)
  2628.  bne.s noworrylife
  2629.  
  2630.  moveq #0,d1
  2631.  move.w shotlife(a0),d2
  2632.  blt.s infinite
  2633.  move.b shotsize(a0),d1
  2634.  move.l #PLR1_GunData,a1
  2635.  lsl.w #2,d1
  2636.  move.w 10(a1,d1.w*8),d1
  2637.  blt.s infinite
  2638.  
  2639.  cmp.w d2,d1
  2640.  bge.s notdone
  2641.  
  2642.  st timeout
  2643.  bra.s infinite 
  2644.  
  2645. notdone:
  2646.  
  2647.  move.w TempFrames,d2
  2648.  add.w d2,shotlife(a0)
  2649.  
  2650. infinite:
  2651.  
  2652. noworrylife:
  2653.  
  2654.  move.w #0,extlen
  2655.  move.b #$ff,awayfromwall
  2656.  
  2657.  moveq #0,d1
  2658.  move.b shotsize(a0),d1
  2659.  move.l #BulletTypes,a1
  2660.  lea (a1,d1.w*8),a1 
  2661.  
  2662.  tst.b shotstatus(a0)
  2663.  beq.s notpopping
  2664.  
  2665.  moveq #0,d1
  2666.  move.b shotsize(a0),d1
  2667.  move.l #BulletSizes,a2
  2668.  move.w 2(a2,d1.w*4),14(a0)
  2669.  
  2670.  moveq #0,d1
  2671.  move.b shotanim(a0),d1
  2672.  
  2673.  move.l 4(a1),a2
  2674.  move.w (a2,d1.w*8),d2
  2675.  cmp.w #-1,d2
  2676.  bne.s notdonepopping
  2677.  move.w #-1,12(a0)
  2678.  move.w #-1,GraphicRoom(a0)
  2679.  clr.b shotstatus(a0)
  2680.  move.b #0,shotanim(a0)
  2681.  rts
  2682. notdonepopping:
  2683.  
  2684.  add.b #1,shotanim(a0)
  2685.  move.w d2,6(a0)
  2686.  move.l 2(a2,d1.w*8),8(a0)
  2687.  move.w 6(a2,d1.w*8),d3
  2688.  add.w d3,4(a0)
  2689.  ext.l d3
  2690.  asl.l #7,d3
  2691.  add.l d3,accypos(a0)
  2692.  rts
  2693.  
  2694. notpopping:
  2695.  
  2696.  moveq #0,d1
  2697.  move.b shotsize(a0),d1
  2698.  move.l #BulletSizes,a2
  2699.  move.w (a2,d1.w*4),14(a0)
  2700.  
  2701.  moveq #0,d1
  2702.  move.b shotanim(a0),d1
  2703.  
  2704.  move.l (a1),a2
  2705.  add.b #1,shotanim(a0)
  2706.  move.w (a2,d1.w*8),d2
  2707.  bge.s notdoneanim
  2708.  
  2709.  move.b #0,shotanim(a0)
  2710.  move.w #0,d1
  2711.  
  2712. notdoneanim:
  2713.  
  2714.  move.w (a2,d1.w*8),6(a0)
  2715.  move.l 2(a2,d1.w*8),8(a0)
  2716.  move.w 6(a2,d1.w*8),d3
  2717.  ext.l d3
  2718.  asl.l #7,d3
  2719.  add.l d3,accypos(a0)
  2720.  
  2721.  move.l ZoneAdds,a2
  2722.  move.l (a2,d0.w*4),d0
  2723.  add.l LEVELDATA,d0
  2724.  move.l d0,objroom
  2725.  
  2726. ******************************** 
  2727.  move.l objroom,a3
  2728.  
  2729.  tst.b ObjInTop(a0)
  2730.  beq.s .notintop
  2731.  adda.w #8,a3
  2732. .notintop:
  2733.  
  2734.  move.l 6(a3),d0
  2735.  sub.l accypos(a0),d0
  2736.  cmp.l #10*128,d0
  2737.  blt .nohitroof 
  2738.  
  2739.  btst #0,shotflags+1(a0)
  2740.  beq.s .nobounce
  2741.  
  2742.  neg.w shotyvel(a0)
  2743.  
  2744.  move.l 6(a3),d0
  2745.  add.l #10*128,d0
  2746.  move.l d0,accypos(a0)
  2747.  
  2748.  btst #1,shotflags+1(a0)
  2749.  beq .nohitroof
  2750.  
  2751.  move.l shotxvel(a0),d0
  2752.  asr.l #1,d0
  2753.  move.l d0,shotxvel(a0)
  2754.  move.l shotzvel(a0),d0
  2755.  asr.l #1,d0
  2756.  move.l d0,shotzvel(a0) 
  2757.  
  2758.  bra .nohitroof
  2759.  
  2760. .nobounce: 
  2761.  
  2762.  move.b #0,shotanim(a0)
  2763.  move.b #1,shotstatus(a0)
  2764.  
  2765.  movem.l d0-d7/a0-a6,-(a7)
  2766.  move.l #HitNoises,a2
  2767.  moveq #0,d0
  2768.  move.b shotsize(a0),d0
  2769.  move.l (a2,d0.w*4),d0
  2770.  blt.s .nohitnoise
  2771.  
  2772.  move.l #ObjRotated,a1
  2773.  move.w (a0),d1
  2774.  move.l (a1,d1.w*8),Noisex
  2775.  move.w d0,Noisevol
  2776.  swap d0
  2777.  move.w d0,Samplenum
  2778.  move.b d1,IDNUM
  2779.  jsr MakeSomeNoise
  2780.  
  2781. .nohitnoise:
  2782.  
  2783.  moveq #0,d0
  2784.  move.l #ExplosiveForce,a2
  2785.  move.b shotsize(a0),d0
  2786.  move.w (a2,d0.w*2),d0
  2787.  beq.s .noexplosion
  2788.  
  2789.  move.w newx,Viewerx
  2790.  move.w newz,Viewerz
  2791.  
  2792.  move.w 4(a0),Viewery
  2793.  move.b ObjInTop(a0),ViewerTop
  2794.  
  2795.  bsr ComputeBlast
  2796.  
  2797. .noexplosion:
  2798.  
  2799.  movem.l (a7)+,d0-d7/a0-a6
  2800.  
  2801. .nohitroof:
  2802.  move.l 2(a3),d0
  2803.  sub.l accypos(a0),d0
  2804.  cmp.l #10*128,d0
  2805.  bgt .nohitfloor 
  2806.  
  2807.  btst #0,shotflags+1(a0)
  2808.  beq.s .nobounceup
  2809.  
  2810.  tst.w shotyvel(a0)
  2811.  blt .nohitfloor
  2812.  
  2813.  moveq #0,d0
  2814.  move.w shotyvel(a0),d0
  2815.  asr.w #1,d0
  2816.  neg.w d0
  2817.  move.w d0,shotyvel(a0)
  2818.  
  2819.  move.l 2(a3),d0
  2820.  sub.l #10*128,d0
  2821.  move.l d0,accypos(a0)
  2822.  
  2823.  btst #1,shotflags+1(a0)
  2824.  beq .nohitfloor
  2825.  
  2826.  move.l shotxvel(a0),d0
  2827.  asr.l #1,d0
  2828.  move.l d0,shotxvel(a0)
  2829.  move.l shotzvel(a0),d0
  2830.  asr.l #1,d0
  2831.  move.l d0,shotzvel(a0) 
  2832.  
  2833.  
  2834.  bra .nohitfloor
  2835. .nobounceup: 
  2836.  
  2837.  
  2838.  move.b #0,shotanim(a0)
  2839.  move.b #1,shotstatus(a0)
  2840.  movem.l d0-d7/a0-a6,-(a7)
  2841.  move.l #HitNoises,a2
  2842.  moveq #0,d0
  2843.  move.b shotsize(a0),d0
  2844.  move.l (a2,d0.w*4),d0
  2845.  blt.s .nohitnoise2
  2846.  
  2847.  move.l #ObjRotated,a1
  2848.  move.w (a0),d1
  2849.  move.l (a1,d1.w*8),Noisex
  2850.  move.w d0,Noisevol
  2851.  swap d0
  2852.  move.w d0,Samplenum
  2853.  move.b d1,IDNUM
  2854.  jsr MakeSomeNoise
  2855. .nohitnoise2:
  2856.  moveq #0,d0
  2857.  move.l #ExplosiveForce,a2
  2858.  move.b shotsize(a0),d0
  2859.  move.w (a2,d0.w*2),d0
  2860.  beq.s .noexplosion2
  2861.  
  2862.  move.w 4(a0),Viewery
  2863.  move.w newx,Viewerx
  2864.  move.w newz,Viewerz
  2865.  move.b ObjInTop(a0),ViewerTop
  2866.  bsr ComputeBlast
  2867.  
  2868. .noexplosion2:
  2869.  movem.l (a7)+,d0-d7/a0-a6
  2870. .nohitfloor:
  2871. ******************** 
  2872.  
  2873.  
  2874.  
  2875.  move.l ObjectPoints,a1
  2876.  move.w (a0),d1
  2877.  lea (a1,d1.w*8),a1
  2878.  move.l (a1),d2
  2879.  move.l d2,oldx
  2880.  move.l shotxvel(a0),d3
  2881.  move.w d3,d4
  2882.  swap d3
  2883.  move.w TempFrames,d5
  2884.  muls d5,d3
  2885.  mulu d5,d4
  2886.  swap d3
  2887.  clr.w d3
  2888.  add.l d4,d3
  2889.  add.l d3,d2
  2890.  move.l d2,newx
  2891.  move.l 4(a1),d2
  2892.  move.l d2,oldz
  2893.  move.l shotzvel(a0),d3
  2894.  move.w d3,d4
  2895.  swap d3
  2896.  muls d5,d3
  2897.  mulu d5,d4
  2898.  swap d3
  2899.  clr.w d3
  2900.  add.l d4,d3
  2901.  add.l d3,d2
  2902.  move.l d2,newz
  2903.  move.l accypos(a0),oldy 
  2904.  
  2905.  move.w shotyvel(a0),d3
  2906.  muls TempFrames,d3
  2907.  move.w shotgrav(a0),d5
  2908.  beq.s nograv
  2909.  muls TempFrames,d5
  2910.  add.l d5,d3
  2911.  move.w shotyvel(a0),d6
  2912.  ext.l d6
  2913.  add.l d5,d6
  2914.  cmp.l #10*256,d6
  2915.  blt.s okgrav
  2916.  move.l #10*256,d6
  2917.  okgrav:
  2918.  move.w d6,shotyvel(a0)
  2919. nograv:
  2920.  move.l accypos(a0),d4 
  2921.  add.l d3,d4
  2922.  
  2923.  move.l d4,accypos(a0)
  2924.  sub.l #5*128,d4
  2925.  move.l d4,newy
  2926.  add.l #5*128,d4
  2927.  asr.l #7,d4
  2928.  move.w d4,4(a0)
  2929.  btst #0,shotflags+1(a0)
  2930.  sne.s wallbounce
  2931.  seq.s exitfirst
  2932.  
  2933.  clr.b hitwall
  2934.  move.b ObjInTop(a0),StoodInTop
  2935.  move.w #%0000010000000000,wallflags
  2936.  move.l #0,StepUpVal
  2937.  move.l #$1000000,StepDownVal
  2938.  move.l #10*128,thingheight
  2939.  move.w oldx,d0
  2940.  cmp.w newx,d0
  2941.  bne.s lalal
  2942.  move.w oldz,d0
  2943.  cmp.w newz,d0
  2944.  beq.s nomovebul
  2945.  move.w #1,walllength
  2946.  
  2947. lalal:
  2948.  movem.l d0/d7/a0/a1/a2/a4/a5,-(a7)
  2949.  jsr MoveObject
  2950.  movem.l (a7)+,d0/d7/a0/a1/a2/a4/a5
  2951. nomovebul:
  2952.  move.b StoodInTop,ObjInTop(a0)
  2953.   
  2954.  tst.b wallbounce
  2955.  beq.s .notabouncything
  2956.  
  2957.  tst.b hitwall
  2958.  beq .nothitwall
  2959.  
  2960. ; we have hit a wall....
  2961.  
  2962.  move.w shotzvel(a0),d0
  2963.  muls wallxsize,d0
  2964.  move.w shotxvel(a0),d1
  2965.  muls wallzsize,d1
  2966.  sub.l d1,d0
  2967.  divs walllength,d0
  2968.  
  2969.  move.w shotxvel(a0),d1
  2970.  move.w wallzsize,d2
  2971.  add.w d2,d2
  2972.  muls d0,d2
  2973.  divs walllength,d2
  2974.  add.w d2,d1
  2975.  move.w d1,shotxvel(a0)
  2976.  
  2977.  move.w shotzvel(a0),d1
  2978.  move.w wallxsize,d2
  2979.  add.w d2,d2
  2980.  muls d0,d2
  2981.  divs walllength,d2
  2982.  sub.w d2,d1
  2983.  move.w d1,shotzvel(a0)
  2984.  
  2985.  btst #1,shotflags+1(a0)
  2986.  beq .nothitwall
  2987.  
  2988.  move.l shotxvel(a0),d0
  2989.  asr.l #1,d0
  2990.  move.l d0,shotxvel(a0)
  2991.  move.l shotzvel(a0),d0
  2992.  asr.l #1,d0
  2993.  move.l d0,shotzvel(a0) 
  2994.   
  2995.  
  2996.  bra .nothitwall
  2997.  
  2998. .notabouncything:
  2999.   
  3000.  tst.b hitwall
  3001.  beq .nothitwall
  3002.  
  3003.  move.l wallhitheight,d4
  3004.  move.l d4,accypos(a0)
  3005.  asr.l #7,d4
  3006.  move.w d4,4(a0)
  3007.  
  3008. .hitsomething
  3009.  clr.b timeout
  3010.  move.b #0,shotanim(a0)
  3011.  move.b #1,shotstatus(a0)
  3012.  
  3013.  movem.l d0-d7/a0-a6,-(a7)
  3014.  move.l #HitNoises,a2
  3015.  moveq #0,d0
  3016.  move.b shotsize(a0),d0
  3017.  move.l (a2,d0.w*4),d0
  3018.  blt.s .nohitnoise
  3019.  
  3020.  move.l #ObjRotated,a1
  3021.  move.w (a0),d1
  3022.  move.l (a1,d1.w*8),Noisex
  3023.  move.w d0,Noisevol
  3024.  swap d0
  3025.  move.w d0,Samplenum
  3026.  move.b d1,IDNUM
  3027.  jsr MakeSomeNoise
  3028.  
  3029. .nohitnoise:
  3030.  
  3031.  moveq #0,d0
  3032.  move.l #ExplosiveForce,a2
  3033.  move.b shotsize(a0),d0
  3034.  move.w (a2,d0.w*2),d0
  3035.  beq.s .noexplosion
  3036.  
  3037.  move.w newx,Viewerx
  3038.  move.w newz,Viewerz
  3039.  move.w 4(a0),Viewery
  3040.  move.b ObjInTop(a0),ViewerTop
  3041.  bsr ComputeBlast
  3042.  
  3043. .noexplosion:
  3044.  
  3045.  movem.l (a7)+,d0-d7/a0-a6
  3046.  
  3047. ; bra doneshot
  3048.  
  3049. ; rts
  3050.  
  3051. .nothitwall:
  3052.  
  3053.  tst.b timeout
  3054.  bne .hitsomething
  3055.  
  3056. lab:
  3057.  
  3058.  
  3059.  move.l objroom,a3
  3060.  move.w (a3),12(a0)
  3061.  move.w (a3),GraphicRoom(a0)
  3062.  move.l newx,(a1)
  3063.  move.l newz,4(a1)
  3064. ************ 
  3065. * Check if hit a nasty
  3066.  
  3067.  tst.l EnemyFlags(a0)
  3068.  bne.s notasplut
  3069.  rts
  3070. notasplut:
  3071.  
  3072.  move.l ObjectData,a3
  3073.  move.l ObjectPoints,a1
  3074.  move.w newx,d2
  3075.  sub.w oldx,d2
  3076.  move.w d2,xdiff
  3077.  move.w newz,d1
  3078.  sub.w oldz,d1
  3079.  move.w d1,zdiff
  3080.  move.w d1,d3
  3081.  move.w d2,d4
  3082.  muls d2,d2
  3083.  muls d1,d1
  3084.  move.l #1,d0
  3085.  add.l d1,d2
  3086.  beq .oksqr
  3087.  
  3088.  move.w #31,d0
  3089. .findhigh
  3090.  btst d0,d2
  3091.  bne .foundhigh
  3092.  dbra d0,.findhigh
  3093. .foundhigh
  3094.  asr.w #1,d0
  3095.  clr.l d3
  3096.  bset d0,d3
  3097.  move.l d3,d0
  3098.  
  3099.  move.w d0,d1
  3100.  muls d1,d1    ; x*x
  3101.  sub.l d2,d1    ; x*x-a
  3102.  asr.l #1,d1    ; (x*x-a)/2
  3103.  divs d0,d1    ; (x*x-a)/2x
  3104.  sub.w d1,d0    ; second approx
  3105.  bgt .stillnot0
  3106.  move.w #1,d0
  3107. .stillnot0
  3108.  
  3109.  move.w d0,d1
  3110.  muls d1,d1
  3111.  sub.l d2,d1
  3112.  asr.l #1,d1
  3113.  divs d0,d1
  3114.  sub.w d1,d0    ; second approx
  3115.  bgt .stillnot02
  3116.  move.w #1,d0
  3117. .stillnot02
  3118.  
  3119.  move.w d0,d1
  3120.  muls d1,d1
  3121.  sub.l d2,d1
  3122.  asr.l #1,d1
  3123.  divs d0,d1
  3124.  sub.w d1,d0    ; second approx
  3125.  bgt .stillnot03
  3126.  move.w #1,d0
  3127. .stillnot03
  3128.  
  3129. .oksqr
  3130.  move.w d0,Range
  3131.  add.w #40,d0
  3132.  muls d0,d0
  3133.  move.l d0,sqrnum
  3134.  
  3135. .checkloop:
  3136.  tst.w (a3)
  3137.  blt .checkedall
  3138.  tst.w 12(a3)
  3139.  blt .notanasty
  3140.  moveq #0,d1
  3141.  move.b 16(a3),d1
  3142.  move.l EnemyFlags(a0),d7
  3143.  btst d1,d7
  3144.  beq .notanasty
  3145.  tst.b numlives(a3)
  3146.  beq .notanasty
  3147.  
  3148.  move.l #ColBoxTable,a6
  3149.  lea (a6,d1.w*8),a6
  3150.  
  3151.  move.w 4(a3),d1
  3152.  move.w 4(a0),d2
  3153.  sub.w d1,d2
  3154.  bge .okh
  3155.  neg.w d2
  3156. .okh:
  3157.  
  3158.  cmp.w 2(a6),d2
  3159.  bgt .notanasty
  3160.  
  3161.  move.w (a3),d1
  3162.  move.w (a1,d1.w*8),d2
  3163.  move.w d2,d4
  3164.  move.w 4(a1,d1.w*8),d3
  3165.  move.w d3,d5
  3166.  sub.w newx,d4
  3167.  sub.w oldx,d2
  3168.  move.w d2,d6
  3169.  sub.w newz,d5
  3170.  sub.w oldz,d3
  3171.  move.w d3,d7
  3172.  muls zdiff,d6
  3173.  muls xdiff,d7
  3174.  sub.l d7,d6
  3175.  bgt.s .pos
  3176.  neg.l d6
  3177. .pos:
  3178.  divs Range,d6
  3179.  cmp.w (a6),d6
  3180.  bgt .stillgoing
  3181.  
  3182.  muls d2,d2
  3183.  muls d3,d3
  3184.  add.l d3,d2
  3185.  cmp.l sqrnum,d2
  3186.  bgt .stillgoing
  3187.  muls d4,d4
  3188.  muls d5,d5
  3189.  add.l d5,d4
  3190.  cmp.l sqrnum,d4
  3191.  bgt .stillgoing
  3192.  
  3193.  move.b shotpower(a0),d6
  3194.  add.b d6,damagetaken(a3)
  3195.  move.w shotxvel(a0),ImpactX(a3)
  3196.  move.w shotzvel(a0),ImpactZ(a3)
  3197.  move.b #0,shotanim(a0)
  3198.  move.b #1,shotstatus(a0)
  3199.  
  3200.  movem.l d0-d7/a0-a6,-(a7)
  3201.  move.l #HitNoises,a2
  3202.  moveq #0,d0
  3203.  move.b shotsize(a0),d0
  3204.  move.l (a2,d0.w*4),d0
  3205.  blt.s .nohitnoise3
  3206.  
  3207.  move.l #ObjRotated,a1
  3208.  move.w (a0),d1
  3209.  move.l (a1,d1.w*8),Noisex
  3210.  move.w d0,Noisevol
  3211.  swap d0
  3212.  move.w d0,Samplenum
  3213.  move.b d1,IDNUM
  3214.  jsr MakeSomeNoise
  3215. .nohitnoise3:
  3216.  moveq #0,d0
  3217.  move.l #ExplosiveForce,a2
  3218.  move.b shotsize(a0),d0
  3219.  move.w (a2,d0.w*2),d0
  3220.  beq.s .noexplosion3
  3221.  
  3222.  move.w 4(a0),Viewery
  3223.  move.w newx,Viewerx
  3224.  move.w newz,Viewerz
  3225.  bsr ComputeBlast
  3226.  
  3227. .noexplosion3:
  3228.  movem.l (a7)+,d0-d7/a0-a6
  3229.  
  3230.  
  3231.  bra .hitnasty
  3232. .stillgoing:
  3233. .notanasty:
  3234.  add.w #64,a3
  3235.  bra .checkloop
  3236. .hitnasty:
  3237. .checkedall
  3238.  
  3239. doneshot:
  3240.  
  3241.  rts
  3242.  
  3243. tmpnewx: dc.l 0
  3244. tmpnewz: dc.l 0
  3245. hithit: dc.l 0
  3246. sqrnum: dc.l 0
  3247. tmpangpos: dc.l 0
  3248. allbars: dc.l 0
  3249. backrout: ds.b 800
  3250. NUMTOCHECK: dc.w 0 
  3251.  
  3252. MAKEBACKROUT:
  3253.  move.l #backrout+256,d0
  3254.  clr.b d0
  3255.  move.l d0,allbars
  3256.  move.l d0,a1
  3257.  move.l #fromback,a0
  3258.  move.w #400,d0
  3259. putinback:
  3260.  move.b (a0)+,(a1)+
  3261.  dbra d0,putinback
  3262.  rts
  3263.  
  3264. putinbackdrop:
  3265.  
  3266.  move.l a0,-(a7)
  3267.  
  3268.  move.w tmpangpos,d5
  3269.  and.w #8191,d5
  3270.  muls #432,d5
  3271.  divs #8192,d5
  3272.  muls #38*2,d5
  3273.  
  3274. ; CACHE_ON d1
  3275.  
  3276.  move.l frompt,a0
  3277.  adda.w #104*4,a0
  3278.  move.l #EndBackPicture,a3
  3279.  lea.l BackPicture,a1
  3280.  add.l d5,a1
  3281.  move.w #2,d4
  3282.  
  3283.  move.l allbars(pc),a2
  3284.  jmp (a2)
  3285.  
  3286. fromback:
  3287.  move.w #31,d3
  3288. onebar:
  3289. vertline:    
  3290. val SET 0
  3291.  
  3292.  REPT 19
  3293.  move.l (a1)+,d0
  3294.  move.w d0,val+104*4(a0)
  3295.  swap d0
  3296.  move.w d0,val(a0)
  3297. val SET val+104*8
  3298.  ENDR
  3299.  
  3300.  cmp.l a3,a1
  3301.  blt.s notoffrightend
  3302.  move.l #BackPicture,a1
  3303. notoffrightend:
  3304.  
  3305.  addq #4,a0
  3306.  dbra d3,onebar
  3307.  addq #4,a0
  3308.  dbra d4,fromback
  3309.  
  3310.  move.l (a7)+,a0
  3311.  rts
  3312.  
  3313. MaxDamage: dc.w 0
  3314.  
  3315. ComputeBlast:
  3316.  
  3317.  clr.w doneflames
  3318.  
  3319.  move.w d0,d6
  3320.  move.w d0,MaxDamage
  3321.  
  3322.  move.w d0,d1
  3323.  ext.l d6
  3324.  neg.w d1
  3325.  move.w 12(a0),d0
  3326.  jsr Flash
  3327.  
  3328.  move.l ZoneAdds,a2
  3329.  move.l (a2,d0.w*4),a2
  3330.  add.l LEVELDATA,a2
  3331.  move.l a2,MiddleRoom
  3332.  
  3333.  move.l ObjectData,a2
  3334.  suba.w #64,a2
  3335.  move.l #TESTAB,a6
  3336.  
  3337.  move.l a0,-(a7)
  3338.  
  3339. HitObjLoop:
  3340.  move.l MiddleRoom,FromRoom
  3341.  add.w #64,a2
  3342.  move.w (a2),d0
  3343.  blt CheckedEmAll
  3344.  tst.w 12(a2)
  3345.  blt.s HitObjLoop
  3346.  moveq #0,d1
  3347.  move.b 16(a2),d1
  3348.  move.l #%1111111111110111100001,d7    ; possible targets
  3349.  btst d1,d7
  3350.  beq.s HitObjLoop
  3351.  
  3352.  move.w 12(a2),d1
  3353.  move.l ZoneAdds,a3
  3354.  move.l (a3,d1.w*4),a3
  3355.  add.l LEVELDATA,a3
  3356.  move.l a3,ToRoom
  3357.  move.l ObjectPoints,a3
  3358.  move.w (a3,d0.w*8),Targetx
  3359.  move.w 4(a3,d0.w*8),Targetz
  3360.  move.w 4(a2),Targety
  3361.  move.b ObjInTop(a2),TargetTop
  3362.  jsr CanItBeSeen
  3363.  tst.b CanSee
  3364.  beq HitObjLoop
  3365.  
  3366.  move.w Targetx,d0
  3367.  sub.w Viewerx,d0
  3368.  move.w d0,d2
  3369.  move.w Targetz,d1
  3370.  sub.w Viewerz,d1
  3371.  move.w d1,d3
  3372.  muls d2,d2
  3373.  muls d3,d3
  3374.  add.l d3,d2 
  3375.  beq .oksqr
  3376.  move.w #31,d4
  3377. .findhigh
  3378.  btst d4,d2
  3379.  dbne d4,.findhigh
  3380. .foundhigh
  3381.  asr.w #1,d4
  3382.  clr.l d3
  3383.  bset d4,d3
  3384.  move.l d3,d4
  3385.  
  3386.  move.w d4,d3
  3387.  muls d3,d3    ; x*x
  3388.  sub.l d2,d3    ; x*x-a
  3389.  asr.l #1,d3    ; (x*x-a)/2
  3390.  divs d4,d3    ; (x*x-a)/2x
  3391.  sub.w d3,d4    ; second approx
  3392.  bgt .stillnot0
  3393.  move.w #1,d4
  3394. .stillnot0
  3395.  
  3396.  move.w d4,d3
  3397.  muls d1,d3
  3398.  sub.l d2,d3
  3399.  asr.l #1,d3
  3400.  divs d4,d3
  3401.  sub.w d3,d4    ; second approx
  3402.  bgt .stillnot02
  3403.  move.w #1,d4
  3404. .stillnot02
  3405.  
  3406.  move.w d4,d3
  3407.  muls d3,d3
  3408.  sub.l d2,d3
  3409.  asr.l #1,d3
  3410.  divs d4,d3
  3411.  sub.w d3,d4    ; second approx
  3412.  bgt .stillnot03
  3413.  move.w #1,d4
  3414. .stillnot03
  3415.  
  3416. .oksqr
  3417.  
  3418.  
  3419.  move.w d4,d3
  3420.  asr.w #3,d3
  3421.  
  3422.  sub.w #4,d3
  3423.  bge.s OkItsnotzero
  3424.  moveq #0,d3
  3425. OkItsnotzero:
  3426.  
  3427.  cmp.w #31,d3
  3428.  bgt HitObjLoop
  3429.  neg.w d3
  3430.  add.w 32,d3
  3431.  
  3432.  move.w d6,d5
  3433.  muls d3,d5
  3434.  asr.l #5,d5
  3435.  cmp.w MaxDamage,d5
  3436.  blt.s okdamage
  3437.  move.w MaxDamage,d5
  3438. okdamage:
  3439.  add.b d5,damagetaken(a2)
  3440.  ext.l d0
  3441.  ext.l d1
  3442.  asl.l #4,d0
  3443.  asl.l #4,d1
  3444.  divs d3,d0
  3445.  divs d3,d1
  3446.  move.w d0,ImpactX(a2)
  3447.  move.w d1,ImpactZ(a2)
  3448.  
  3449.  bra HitObjLoop 
  3450.  
  3451. CheckedEmAll:
  3452.  
  3453. ; Now put in the flames!
  3454.  move.l (a7)+,a0
  3455.  
  3456.  move.w (a0),d0
  3457.  move.l ObjectPoints,a2
  3458.  move.w (a2,d0.w*8),d1
  3459.  move.w 4(a2,d0.w*8),d2
  3460.  
  3461.  move.w d1,middlex
  3462.  move.w d2,middlez
  3463.  
  3464.  move.w #9,d7
  3465.  
  3466.  clr.b exitfirst
  3467.  clr.b wallbounce
  3468.  move.w 12(a0),d0
  3469.  move.l ZoneAdds,a3
  3470.  move.l (a3,d0.w*4),a3
  3471.  add.l LEVELDATA,a3
  3472.  move.l a3,MiddleRoom
  3473.  
  3474.  move.l PlayerShotData,a3
  3475.  move.w 4(a0),d0
  3476.  ext.l d0
  3477.  asl.l #7,d0
  3478.  move.l d0,oldy
  3479.  
  3480.  moveq #2,d5
  3481.  move.w #19,NUMTOCHECK
  3482.  
  3483.  move.w #3,d6
  3484. radiusloop:
  3485.  move.w #2,d7
  3486.  
  3487. DOFLAMES:
  3488.  
  3489.  move.w NUMTOCHECK,d1
  3490. .findonefree
  3491.  move.w 12(a3),d2
  3492.  blt.s .foundonefree
  3493.  adda.w #64,a3
  3494.  dbra d1,.findonefree
  3495.  rts
  3496. .foundonefree
  3497.  
  3498.  move.w d1,NUMTOCHECK
  3499.  
  3500.  add.w #1,doneflames
  3501.  move.w middlex,d1
  3502.  move.w middlez,d2
  3503.  move.w d1,oldx
  3504.  move.w d2,oldz
  3505.  move.b ObjInTop(a0),StoodInTop
  3506.  
  3507.  jsr GetRand
  3508.  ext.w d0
  3509.  muls d5,d0
  3510.  asr.w #1,d0
  3511.  bne.s .xnz
  3512.  moveq #2,d0
  3513. .xnz:
  3514.  add.w d0,d1
  3515.  jsr GetRand
  3516.  ext.w d0
  3517.  muls d5,d0
  3518.  asr.w #1,d0
  3519.  bne.s .znz
  3520.  moveq #2,d0
  3521. .znz: 
  3522.  add.w d0,d2
  3523.  move.l oldy,d3
  3524.  jsr GetRand
  3525.  muls d5,d0
  3526.  asr.l #3,d0
  3527.  add.l d0,d3
  3528.  move.l d3,newy
  3529.  
  3530.  move.w d1,newx
  3531.  move.w d2,newz
  3532.  move.l MiddleRoom,objroom
  3533.  
  3534.  
  3535.  movem.l d5/d6/a0/a1/a3/d7/a6,-(a7)
  3536.  move.w #80,extlen
  3537.  move.b #1,awayfromwall
  3538.  jsr MoveObject
  3539.  movem.l (a7)+,d5/d6/a0/a1/a3/d7/a6
  3540.  
  3541.  move.l objroom,a2
  3542.  move.w (a2),12(a3)
  3543.  
  3544.  move.l newy,d0
  3545.  
  3546.  move.l ToZoneFloor(a2),d1
  3547.  move.l ToZoneRoof(a2),d2
  3548.  tst.b ObjInTop(a0)
  3549.  beq.s .okinbot
  3550.  move.l ToUpperFloor(a2),d1
  3551.  move.l ToUpperRoof(a2),d2
  3552. .okinbot:
  3553.  
  3554.  cmp.l d0,d1
  3555.  bgt.s .abovefloor
  3556.  move.l d1,d0
  3557. .abovefloor: 
  3558.  
  3559.  cmp.l d0,d2
  3560.  blt.s .belowroof
  3561.  move.l d2,d0
  3562. .belowroof:
  3563.  
  3564.  move.l d0,accypos(a3)
  3565.  asr.l #7,d0
  3566.  move.w d0,4(a3)
  3567.  move.b #2,16(a3)
  3568.  move.b #5,shotanim(a3)
  3569.  sub.b d5,shotanim(a3)
  3570.  st shotstatus(a3)
  3571.  move.b StoodInTop,ObjInTop(a3)
  3572.  move.b #2,shotsize(a3)
  3573.  st worry(a3)
  3574.  move.w (a3),d0
  3575.  move.l ObjectPoints,a2
  3576.  move.w newx,(a2,d0.w*8)
  3577.  move.w newz,4(a2,d0.w*8)
  3578.  
  3579.  adda.w #64,a3
  3580.  
  3581.  dbra d7,DOFLAMES
  3582.  add.w #1,d5
  3583.  dbra d6,radiusloop
  3584.  
  3585.  rts
  3586.  
  3587. MiddleRoom: dc.l 0
  3588. middlex: dc.w 0
  3589. middlez: dc.w 0
  3590. doneflames: dc.w 0
  3591.  
  3592. TESTAB: ds.l 200